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

标签 ios objective-c regex hashtag nsregularexpression

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

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

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

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

最佳答案

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

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

请注意,替代组 (#|@) 在转换为字符类 [#@] 时工作效率更高(它涉及更少的回溯)。

Regex breakdown :

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

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

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

注意这个second version将不支持诸如 @-nick.name- 之类的名称。

关于ios - NSRegularExpression 用于标签和带有特殊字符的提及?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33735272/

相关文章:

ios - "Core Data could not fulfill a fault"表示未删除的对象

javascript - 如何将javascript(正则表达式)字符串与另一个字符串进行比较/匹配/替换,忽略字符串顺序

javascript - 使用正则表达式拆分带有标签的字符串

ios - 允许登录类在全局拥有一个共享实例

ios - Swift - 设置字典的行数

ios - 使用 nib 文件开始/结束外观转换的不平衡调用

objective-c - 在 Cocoa 中创建单选按钮矩阵

php youtube和链接正则表达式正在结合,反过来渲染无用

ios - 从 UITextView 中删除/删除 NSTextAttachment

ios - UIKeyCommand 操作未被调用