/ / Regex funziona in Perl, non come NSRegularExpresson - regex, swift, nsregularexpression

Regex funziona in Perl, non come NSRegularExpresson - regex, swift, nsregularexpression

Ho questo regex:

([^ trn[{(-])?"(?(1)|(?=s | sb))

con la seguente sostituzione:

$1’

Questo sembra funzionare in Perl. Dato una frase come "Miniere del Re Salomone", lo cambierà in King Solomon’s Mines, ma lancia un EXC_BAD_ACCESS errore come NSRegularExpression. Questa suite di test suggerisce che la sintassi sia valida in php e Python ma non in Javascript, e che il (?(1) parte è il colpevole.

Esempio di codice Swift:

let string = "King Solomon"s Mines"
var anError: NSError? = nil
let pattern = "([^\ \t\r\n\[\{\(\-])?"(?(1)|(?=\s | s\b))"
let regex = NSRegularExpression(pattern: pattern, options: .CaseInsensitive, error: &anError)
let range = NSMakeRange(0, countElements(string))
let template = "$1’"
let newString = regex.stringByReplacingMatchesInString(string, options: nil, range: range, withTemplate: template)

Il let regex la dichiarazione è dove un campo giochi otterrà l'errore di accesso errato. Devo modificare la regex per farlo funzionare in Swift?

(Modifica: ho dimenticato di inserire le fughe per i backslash. L'avevo nel mio codice.)

risposte:

0 per risposta № 1

Non credo che il test condizionale (?(1)...|...) è disponibile, ma non è un problema in quanto non è necessario. Questo modello fa lo stesso:

let pattern = ""(?:(?<=[^\s[{(-]")|(?=\s | s\b))"

Nota: se non funziona, prova a raddoppiare la parentesi quadra aperta nella classe personaggio.