Eu estou tentando usar NSRegularExpression (pattern: regex) para extrair 10.32.15.235 em uma seqüência de caracteres: "IPAddress": "10.32.15.235", "WAN" usando Swift 3.
No entanto, estou recebendo um erro ao usar essa função responda
func matches(for regex: String, in text: String) -> [String] {
do {
let regex = try NSRegularExpression(pattern: regex)
let nsString = text as NSString
let results = regex.matches(in: text, range: NSRange(location: 0, length: nsString.length))
return results.map { nsString.substring(with: $0.range)}
} catch let error {
print("invalid regex: (error.localizedDescription)")
return []
}
}
Com esta chamada:
let pattern = "IPAddress\":\"(.+?)\"
let IPAddressString = self.matches(for: pattern, in: stringData!)
print(IPAddressString)
No entanto, a parte do erro da função é chamada com este erro:
regex inválido: o valor “IPAddress”: “(. +?)” é inválido.
Você pode me ajudar a modificar a expressão regex do Swift 3?
obrigado
Respostas:
0 para resposta № 1Observe que, caso você tenha um JSON válido, você pode usar um analisador JSON com o Swift.
Para corrigir sua abordagem atual de regex, você pode usar
let pattern = "(?<=IPAddress":")[^"]+"
Detalhes do padrão
(?<=IPAddress":")
- um lookahead positivo que corresponde a uma posição na string logo apósIPAddress":"
substring[^"]+
- uma classe de caractere negada correspondendo a 1 ou mais caracteres que não sejam"
Veja o demo regex.