#iphone #objective-c
#iPhone #objective-c
Вопрос:
Я хотел бы преобразовать ссылки на имена пользователей, такие как @me, @you, @them (стиль Twitter), в ссылки. Какой шаблон NSRegularExpression был бы правильным для этого?
Основываясь на вводе из ответов ниже, вот что я в итоге использовал…
NSError *error = NULL;
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"(?<!\w)@([\w\._-] )?" options:NSRegularExpressionCaseInsensitive error:amp;error];
NSString *newString = [regex stringByReplacingMatchesInString:stringIn options:0 range:NSMakeRange(0, [stringIn length]) withTemplate:@"<a href='http://mydomain.com/$1'>$0</a>"];
Возможно, это не совсем подходит для Twitter, поскольку мой собственный сайт поддерживает точки, тире и подчеркивания
Комментарии:
1. Работает хорошо. Как указывает E-madd в своей правке, если вы используете это для Twitter, вы хотите запретить точки и дефисы, поэтому шаблон «(? <!\w)@([\w _] )?». В именах пользователей Twitter разрешены подчеркивания.
Ответ №1:
(?<!w)@w
должно быть довольно безопасно.
(?<!w)
Это называется отрицательным взглядом назад и гарантирует, что перед @ нет символа слова, что препятствует сопоставлению адресов электронной почты.
Ответ №2:
@[a-zA-Z0-9_]
работа должна быть выполнена довольно хорошо.
Я бы рекомендовал добавить некоторые тестовые данные в RegExr и поработать с регулярным выражением, чтобы оно соответствовало именно тому, что вам нужно.
Комментарии:
1. Амперсанд не обязательно экранировать. Названия Twitter также могут содержать подчеркивания.
2. Кроме того, звездочка означает ноль или более случаев, так что это будет соответствовать
@
само по себе.3. @dreamlax Хороший улов. Моя ошибка. @Nikolai Я надеюсь, что любой, кто хочет использовать регулярные выражения, по крайней мере, понимает их достаточно, чтобы вносить в них незначительные изменения. В любом случае, ответ обновлен, чтобы отразить обе критики.