标签和提及特殊字符的NSRegularExpression?

我正在使用下面的正则expression式来检测我的应用程序中的主题标签和提及。

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

但是,我的应用程序中的用户可以在其用户名中使用一些特殊字符。 例如@user.name@user_name 。 空间是不允许的。 然而使用这个正则expression式只会在@user时才会检测到@user ,实际上它应该是@user.name 。 人质工作完美,但用户名中的特殊字符打破提及function。

我真的是新的正则expression式,我不知道我需要改变,以解决这个问题。 我很确定它要做的事情,但是我能做些什么来帮忙。

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

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

请注意,替代组(#|@)在转换为字符类[#@]时效果更好(它涉及的回溯较less)。

正则expression式细分 :

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

更多的增强版本(以确保# / @之后的第一个字符是一个单词字符,整个用户名至less有一个字符长):

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

请注意, 第二个版本不支持@-nick.name-这样的名称。