/ / NSRegularExpression para extrair o subconjunto de texto no Swift 3 - regex, swift3, nsregularexpression

NSRegularExpression para extrair o subconjunto de texto em Swift 3 - regex, swift3, nsregularexpression

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 № 1

Observe 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ós IPAddress":" substring
  • [^"]+ - uma classe de caractere negada correspondendo a 1 ou mais caracteres que não sejam "

Veja o demo regex.