/ / Regex работи в Perl, не е като NSRegularExpresson - regex, swift, nsregularexpression

Regex работи в Perl, не като NSRegularExpresson - regex, бърза, nsregularexpression

Имам този реге:

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

със следното заместване:

$1’

Това изглежда работи в Perl. Като се има предвид фраза като „Мините на цар Соломон“, тя ще го промени King Solomon’s Mines, но хвърля EXC_BAD_ACCESS грешка като NSRegularExpression. Този тестов пакет предполага, че синтаксисът е валиден в php и Python, но не и в Javascript, и че (?(1) част е виновникът.

Примерен код 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)

Най- let regex декларация е мястото, където детската площадка ще получи грешка в лошия достъп. Трябва ли да променям изречението, за да го използвам в Swift?

(Редактиране: забравих да поставям скритите за обратната наклонена черта. Имах това в моя код.)

Отговори:

0 за отговор № 1

Не мисля, че е условен тест (?(1)...|...) е налице, но всъщност не е проблем, тъй като не е необходим. Този модел прави същото:

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

Забележка: ако не работи, опитайте се да избегнете двойното отваряне на квадратната скоба в класа на героите.