主题标签的NSRegularExpression和带有特殊字符的提及?

时间:2015-11-16 12:21:25

标签: ios objective-c regex hashtag nsregularexpression

我使用以下正则表达式来检测我的应用中的标签和提及。

NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"(#|@)(\\w+)" options:NSRegularExpressionCaseInsensitive error:&error];

但是,我的应用中的用户可以在其用户名中使用一些特殊字符。例如@user.name@user_name。不允许有空格。但是,使用正则表达式只能检测到@user,而实际上它应该是@user.name。人质工作完美,但用户名中的特殊字符会破坏提及功能。

我对正则表达式真的很陌生,我不知道我需要改变什么来解决这个问题。我非常确定要做的事情\\w+,但我可以在一些帮助下做些什么。

1 个答案:

答案 0 :(得分:6)

由于您需要在@#之后匹配任何非空格字符,但此序列的最后一个字符必须是单词字符,您可以安全地使用

@"[#@]\\S+\\b"

请注意,替换组(#|@)在转换为字符类[#@]时会更有效地工作(它涉及更少的回溯)。

Regex breakdown

  • [#@] - 匹配#@,1次
  • \S+\b - 匹配1个或多个非空格字符,但最后一个字符必须位于字边界。

更强大的版本(确保# / @之后的第一个字符是单词字符,整个用户名长度至少为1个字符):

@"[#@]\\w\\S*\\b"

请注意,此second version不支持@-nick.name-等名称。