RegexKitLite не соответствует NSString правильно - PullRequest
0 голосов
/ 06 ноября 2011

Хорошо, я пытаюсь написать код, который удаляет слова, содержащие апостроф, из строки NSString. Для этого я решил использовать регулярные выражения, и я написал одно, которое я протестировал на этом сайте: http://rubular.com/r/YTV90BcgoQ

Здесь выражение: \S*'+\S

Как показано на сайте, слова, содержащие апостроф , соответствуют . Но почему-то в приложении я пишу, используя этот код:

    sourceString = [sourceString stringByReplacingOccurrencesOfRegex:@"\S*'+\S" withString:@""];

Не возвращает никакого положительного результата. NSLogging «sourceString», я заметил, что такие слова, как «не» и «не» все еще присутствуют в выводе.

Не похоже, что мое выражение является проблемой, но, возможно, RegexKitLite не принимает определенные типы выражений? Если кто-то знает, что здесь происходит, пожалуйста, просветите меня!

1 Ответ

1 голос
/ 06 ноября 2011

Литерал NSString s использует \ в качестве escape-символа, чтобы вы могли помещать в них такие символы, как символы новой строки \n. Регулярные выражения также используют обратную косую черту в качестве escape-символа для таких классов символов, как \S. Когда ваша литеральная строка проходит через компилятор, обратные слеши обрабатываются как escape-символы и не попадают в шаблон регулярных выражений.

Следовательно, вам нужно избежать обратной косой черты в вашем литерале NSString, чтобы в итоге получить обратную косую черту в строке, которая используется в качестве шаблона: @"\\S*'+\\S".

Вы должны были видеть предупреждение компилятора о "Неизвестной escape-последовательности" - не игнорируйте эти предупреждения!

...