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-последовательности" - не игнорируйте эти предупреждения!

Другие вопросы по тегам