RegexKitLite не соответствует NSString правильно
Хорошо, я пытаюсь написать код, который удаляет слова, содержащие апостроф, из строки NSString. Для этого я решил использовать регулярные выражения, и я написал одно, которое я протестировал с помощью этого сайта: http://rubular.com/r/YTV90BcgoQ
Здесь выражение выглядит так: \S*'+\S
Как показано на сайте, слова, содержащие апостроф , совпадают. Но по какой-то причине в приложении я пишу, используя этот код:
sourceString = [sourceString stringByReplacingOccurrencesOfRegex:@"\S*'+\S" withString:@""];
Не возвращает никакого положительного результата. NSLogging "sourceString", я заметил, что такие слова, как "не" и "не делает" все еще присутствуют в выводе.
Не похоже, что мое выражение является проблемой, но, возможно, RegexKitLite не принимает определенные типы выражений? Если кто-то знает, что здесь происходит, пожалуйста, просветите меня!
1 ответ
Буквальный NSString
использование \
как побег, так что вы можете поставить такие вещи, как переводы строк \n
в них. Регулярные выражения также используют обратную косую черту в качестве escape-символа для таких классов символов, как \S
, Когда ваша литеральная строка запускается через компилятор, обратные слеши обрабатываются как escape-символы и не попадают в шаблон регулярных выражений.
Таким образом, вы должны избежать обратной косой черты в вашем буквальном NSString
, чтобы получить обратную косую черту в строке, которая используется в качестве шаблона: @"\\S*'+\\S"
,
Вы должны были видеть предупреждение компилятора о "неизвестной escape-последовательности" - не игнорируйте эти предупреждения!