NSRegularExpression 用于标签和带有特殊字符的提及?

NSRegularExpression for hashtags and mentions with special characters?

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

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

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

我真的是正则表达式的新手,我不确定我需要更改什么来解决这个问题。我很确定它有事可做 \w+ 但我能在一些帮助下做些什么。

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

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

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

Regex breakdown:

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

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

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

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