理解正则表达式向前看(?!|?=)

时间:2014-05-02 22:17:35

标签: regex

你能帮忙理解为什么用这个文字:

  

@Hello没有机会@World para ver felipe@email.com
  @Hello没有机会@World:

此表达式/@World(?!:)/按预期工作,但此表达式失败/@(\w+)(?!:)/? (至少它与预期值不匹配=> @ word excluding :

我认为这个/@World/也可以转换成类似/@w+/的东西,但事实上似乎并非如此。能帮我理解差异吗?

1 个答案:

答案 0 :(得分:4)

GREP默认贪婪:使用+尽可能匹配,同时仍然返回有效匹配。

你的\@(\w+)(?!:)失败了,因为" @World:"它返回" @ Worl"。它适合你的表达:单词字符,然后不是":" - 下一个字符是d

请改用:

\@(\w+)\b(?!:)

这样,它没有选择来测试整个字符串" @ World",后面跟着非单词字符 - 如果是的话,它必须不是冒号。