Sto cercando di usare NSRegularExpression (pattern: regex) per estrarre 10.32.15.235 in una stringa: "IPAddress": "10.32.15.235", "WAN" usando Swift 3.
Tuttavia, sto ottenendo un errore utilizzando questa funzione da questo risposta
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 []
}
}
Con questa chiamata:
let pattern = "IPAddress\":\"(.+?)\"
let IPAddressString = self.matches(for: pattern, in: stringData!)
print(IPAddressString)
Tuttavia, la parte di errore della funzione viene chiamata con questo errore:
regex non valida: il valore "Indirizzo IP": "(. +?)" non è valido.
Puoi aiutarmi a modificare l'espressione regolare per Swift 3?
Grazie
risposte:
0 per risposta № 1Si noti che nel caso in cui si disponga di un JSON valido, è possibile utilizzare un parser JSON con Swift.
Per correggere il tuo attuale approccio regex, puoi usare
let pattern = "(?<=IPAddress":")[^"]+"
Dettagli del modello
(?<=IPAddress":")
- un lookahead positivo che corrisponde a una posizione nella stringa subito dopoIPAddress":"
sottostringa[^"]+
- una classe di caratteri negata che corrisponde a 1 o più caratteri diversi da"
Vedere il regex demo.