正则表达式的负面前瞻

时间:2016-04-19 17:54:58

标签: regex lookahead negative-lookahead

有什么区别:

^(?!.*baa)[abc]*$

^(?!baa)[abc]*$

.*的作用是什么。我知道这意味着任何字符0次或更多次,但为什么第二次捕获字符串如cccaabaa应该被丢弃?

3 个答案:

答案 0 :(得分:2)

它们之间的区别是:

  1. ^(?!.*baa)要求输入中的baa不能任何地方
  2. ^(?!baa)要求baa不在输入的
  3. .*允许任何内容在开始^baa之间。

答案 1 :(得分:0)

  

^(?!。* baa)[abc] * $ - 从当前位置开始(此处由于开始   ^),消耗整个字符串然后回溯以查找是否存在   字符串中的任何位置都没有baa。现在,前瞻匹配的位置(此处开始)检查   以下是abc

的组合

enter image description here

  

^(?!baa)[abc] * $ - 从当前位置开始(此处由于开始   ^)检查以下内容   不是baabaa可以在任何地方,但不是在开始。

enter image description here

答案 2 :(得分:0)

(?! )是一个负向前瞻:它指定了一个无法匹配的组。

^(?!baa)[abc]*$中,您正在寻找一个不以“baa”开头并且只包含ab或c中的字符的字符串:cccaabaa匹配:它不以“baa”开头

^(?!.*baa)[abc]*$中,您正在寻找的字符串不会以baa后面的任何内容开头,并且只包含来自ab或c的字符:cccaabaa不匹配,因为它以“ cccaa跟随baa“