我正在使用以下正则表达式来检测我的应用中的主题标签和提及。
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"(#|@)(\\w+)" options:NSRegularExpressionCaseInsensitive error:&error];
但是我的应用程序中的用户可以在他们的用户名中使用一些特殊字符。例如 @user.name
或 @user_name
。不允许有空格。然而,使用 thins 正则表达式只会检测到 @user
,而实际上它应该是 @user.name
。人质工作完美,但用户名中的特殊字符破坏了提及功能。
我真的是正则表达式的新手,我不确定我需要更改什么来解决这个问题。我很确定它可以做一些事情 \\w+
但我可以在一些帮助下做些什么。
最佳答案
由于您需要匹配 @
或 #
之后的任何非空白字符,但此序列的最后一个字符必须是单词字符,因此您可以安全地使用
@"[#@]\\S+\\b"
请注意,替代组 (#|@)
在转换为字符类 [#@]
时工作效率更高(它涉及更少的回溯)。
[#@]
- 匹配#
或@
,1 次\S+\b
- 匹配 1 个或多个非空白字符,但最后一个必须在单词边界处。
增强版(确保 #
/@
之后的第一个字符是单词字符,整个用户名至少有一个字符长):
@"[#@]\\w\\S*\\b"
注意这个second version将不支持诸如 @-nick.name-
之类的名称。
关于ios - NSRegularExpression 用于标签和带有特殊字符的提及?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33735272/