我使用以下正则表达式来检测我的应用中的标签和提及。
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"(#|@)(\\w+)" options:NSRegularExpressionCaseInsensitive error:&error];
但是,我的应用中的用户可以在其用户名中使用一些特殊字符。例如@user.name
或@user_name
。不允许有空格。但是,使用正则表达式只能检测到@user
,而实际上它应该是@user.name
。人质工作完美,但用户名中的特殊字符会破坏提及功能。
我对正则表达式真的很陌生,我不知道我需要改变什么来解决这个问题。我非常确定要做的事情\\w+
,但我可以在一些帮助下做些什么。
答案 0 :(得分:6)
由于您需要在@
或#
之后匹配任何非空格字符,但此序列的最后一个字符必须是单词字符,您可以安全地使用
@"[#@]\\S+\\b"
请注意,替换组(#|@)
在转换为字符类[#@]
时会更有效地工作(它涉及更少的回溯)。
[#@]
- 匹配#
或@
,1次\S+\b
- 匹配1个或多个非空格字符,但最后一个字符必须位于字边界。更强大的版本(确保#
/ @
之后的第一个字符是单词字符,整个用户名长度至少为1个字符):
@"[#@]\\w\\S*\\b"
请注意,此second version不支持@-nick.name-
等名称。