前缀排除的正则表达式

时间:2011-06-08 16:34:07

标签: regex

我试图从一个段落中提取 gmail.com ,我只希望那些不以 @ 开头的字符串匹配。

示例:abc@gmail.com(与此不符); www.gmail.com(匹配此)

我尝试了以下内容:(?!@)gmail\.com但这不起作用。这与上面示例中突出显示的案例相匹配。有什么建议吗?

3 个答案:

答案 0 :(得分:7)

如果你的正则表达式支持它,你需要一个负面的背后隐藏,例如(?<!@)gmail\.com并添加\b以避免匹配foogmail.comz,例如:(?<!@)\bgmail\.com\b

答案 1 :(得分:6)

[^@\s]*(?<!@)\bgmail\.com\b

假设您要在较长的文本正文中查找字符串,而不是验证整个字符串。

说明:

[^@\s]*     # match any number of non-@, non-space characters
(?<!@)      # assert that the previous character isn't an @
\b          # match a word boundary (so we don't match hogmail.com)
gmail\.com  # match gmail.com
\b          # match a word boundary

乍看之下,(?<!@)外观断言似乎没有必要,但事实并非如此 - 否则gmail.com abc@gmail.com部分会匹配。

答案 2 :(得分:1)

使用negative lookbehind

使用此正则表达式
/^.*?(?<!@)gmail\.com$/