请解释我这个正则表达式

时间:2014-02-17 10:34:25

标签: regex

我一直在研究正则表达式几天,特别是看了一下。我无法理解这个与“bar”组成的句子不匹配的正则表达式。

^(?!.*bar).*$

我无法理解为什么使用.*bar。如果有人能给我一个很好的解释,这对我很有帮助。谢谢....

3 个答案:

答案 0 :(得分:2)

如果内部的匹配内容匹配,那么否定前瞻就会导致整个比赛失败。

因此,如果在指定的位置(在您的示例中,^在行的开头指定)前瞻中的模式匹配,则整个匹配失败。

让我们看看,你有.*bar。如果.*bar匹配,则整个正则表达式失败。

.*bar什么时候匹配?答案是,只要行中有bar,它就会匹配:

bar
foo bar
foo bar baz

假设没有.*。因此,您将看到负面前瞻中的bar。如果bar仅匹配,则整个匹配失败。现在,请记住这个检查是在开始。

bar
foo bar
foo bar baz

第一行是唯一一个在开头匹配bar的行。因此,^(?!bar).*$只会阻止一行开头的匹配,但如果有^(?!.*bar).*$,则bar会阻止该行匹配。

希望这会让它更清晰一些:)

答案 1 :(得分:0)

编辑:修复了示例

(?!.*bar)

是否为前瞻性意味着它会检查以确保。*栏不在该行中。

以下是如何使用否定前瞻(See it in action)的示例:

(?!GBP).*\d{3}.*

这确保匹配三位数字,只有当它们前面没有术语“' GBP'

答案 2 :(得分:0)

<强>正则表达式

^(?!.*bar).*$

<强> Source

  
NODE                     EXPLANATION
--------------------------------------------------------------------------------
  ^                        the beginning of the string
--------------------------------------------------------------------------------
  (?!                      look ahead to see if there is not:
--------------------------------------------------------------------------------
    .*                       any character except \n (0 or more times
                             (matching the most amount possible))
--------------------------------------------------------------------------------
    bar                      'bar'
--------------------------------------------------------------------------------
  )                        end of look-ahead
--------------------------------------------------------------------------------
  .*                       any character except \n (0 or more times
                           (matching the most amount possible))
--------------------------------------------------------------------------------
  $                        before an optional \n, and the end of the
                           string