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