Проблема с RegExKitLite и амперсандами - PullRequest
0 голосов
/ 10 июня 2009

Поэтому я пытаюсь скопировать URL-адреса из строки NSString с помощью RegExKitLite, и я столкнулся со странной проблемой.

NSLog(@"Array: %@", [message componentsMatchedByRegex:@"^(http://)[-a-zA-Z0-9+&@#/%?=~_()|!:,.;]*"]);

NSString * сообщение - это просто текст с URL-адресом внутри. Странно то, что он не работает с амперсандом. Если я вынимаю амперсанд, он работает нормально, но по понятным причинам я хочу оставить амперсанд внутри. Я также новичок в Regex, так что не сильно меняй мое поисковое выражение:)

Кто-нибудь испытывал это раньше с RegExKitLite или RegEx в целом в Objective-C?

Ответы [ 2 ]

4 голосов
/ 10 июня 2009

В классах символов регулярного выражения ICU & означает пересечение. Например, @ "[[: letter:] & [a-z]]". Таким образом, это должно быть процитировано как предложение Питера, с обратной косой чертой, то есть \ & в регулярном выражении. Однако \ имеет особое значение в строках C, включая строки Objective C. Таким образом, \ должен сам по себе быть указан с. Так что вам нужно \ & в вашем шаблоне. Т.е. [-a-zA-Z0-9 + \ & @ # /%? = ~ _ () |!:,.;]

Кроме того, я не уверен, что вы собираетесь сделать с ^ в начале URL. Если вы хотите, чтобы регулярное выражение совпадало где-либо в строке, вместо этого вы должны использовать \ b (перерыв слова). Если вы хотите, чтобы он совпадал с URL-адресами, которые находятся только в начале сообщения, вы получите только одно совпадение, как написано. Если вы хотите, чтобы он совпадал с URL-адресами в начале строки, добавьте (? M) в начале регулярного выражения, чтобы включить многострочное сопоставление для ^ (и рассмотрите возможность добавления $ в конец регулярного выражения).

0 голосов
/ 10 июня 2009

У меня нет опыта работы с RegExKitLite, и я никогда не сталкивался с & как особенным внутри класса символов, но попробуйте поставить \ перед ним, чтобы увидеть, работает ли это?

NSLog(@"Array: %@", [message componentsMatchedByRegex:@"^(http://)[-a-zA-Z0-9+\&@#/%?=~_()|!:,.;]*"]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...