У меня есть это регулярное выражение:Regex Работает в Perl, Не так NSRegularExpresson
([^\ \t\r\n\[\{\(\-])?'(?(1)|(?=\s | s\b))
со следующей подстановкой:
$1’
Это, кажется, работает в Perl. Учитывая фразу типа «King Solomon's Mines», она изменит ее на King Solomon’s Mines
, но она выдает ошибку EXC_BAD_ACCESS
как NSRegularExpression
. This test suite предполагает, что синтаксис действителен в 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?
(Edit: забыл поставить в побегах для обратных косых черт я, что в моем коде.).
Вы хотите заменить '' 'на' ’ '? – hjpotter92
Линия 'let pattern = ...' вообще не компилируется (несколько ошибок «неправильной escape-последовательности в буквальном»). –
Вы пытаетесь использовать это регулярное выражение точно? В NSRegularExpression используется регулярное выражение ICU, а не регулярное выражение Perl. Существуют различия между этими двумя вкусами, а также необходимость избегать некоторых строк в Swift, таких как обратная косая черта. Убедитесь, что регулярное выражение соответствует синтаксису регулярного выражения ICU, а также экрану, требуемому строками Swift. – ColGraff