前缀排除的正则表达式

Tom*_*Tom 4 regex

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

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

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

Qta*_*tax 7

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


Tim*_*ker 6

[^@\s]*(?<!@)\bgmail\.com\b
Run Code Online (Sandbox Code Playgroud)

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

说明:

[^@\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
Run Code Online (Sandbox Code Playgroud)

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