标签和提及特殊字符的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-
这样的名称。