我对RegEx很糟糕,并且在互联网上找到了这个位置。它用于匹配Twitter风格的@username,但它有一个小问题 - 它也接受一个空格作为单词。
NSRegularExpression *atRegex = [NSRegularExpression regularExpressionWithPattern:@"(?<!\\w)@([\\w\\._-]+)?" options:NSRegularExpressionCaseInsensitive error:&error];
示例:“@erik”匹配正确,但“@ erik”也匹配,不应该匹配。
答案 0 :(得分:3)
您的正则表达式包含
@(...)?
最后的?
表示前面(...)
内的所有内容都是完全可选的。因此,你的正则表达式不必匹配@。
要解决此问题,您可以删除( )?
,离开:
"(?<!\\w)@[\\w\\._-]+"
但是,您还应该调查(?<!\\w)
为您做了什么,以及您是否需要它。
答案 1 :(得分:1)
@ erik匹配的原因很可能是因为您的捕获组是:
([\\w\\._-]+)
这意味着一个或多个单词characteres,句点,下划线或短划线。所以@ erik匹配sinced“erik”符合此标准。 lookbehind asertion和@符号不包含在匹配组中,但它们应该是匹配的标准。
尝试组合你所拥有的零宽度负面外观asertion
(?!<\\w)
表示任何非单词字符,进入您的捕获组。它不会包含在匹配中,但将结合起来表示“找到一个或多个单词字符,句号,下划线或短划线的字符串,跟随非单词字符和”@“符号。正如Tim指出的那样,这是为了避免电子邮件匹配。
试试这个:
"((?<!\\w)@[\\w\\._-]+)"
*请注意我不是一个客观的程序员,所以我不熟悉它,知道你是否需要写\\ w而不是\ w。在我习惯的正则表达式中,你只能使用一个转义字符。如果上述方法无效,请查阅您的文档。
答案 2 :(得分:0)
@ \ S *
http://regexpal.com/可以真正帮助绑定