2015-01-15 53 views
1

我試着寫與負向前查找一個正則表達式,但下面的正則表達式不起作用:如何編寫所有字符序列不匹配「AAA」

^.+(?!aaa).+$ 

它符合項目所有序列在所有。如何修改?

+0

爲什麼你需要排除模式如果實際正則表達式(在這個詞的意義上的Kleene)就足夠了?我的意思是,不''([^ a](aa?)?)* $'描述你想匹配的語言? –

回答

4

所有你需要做的是一個.*添加到向前看組

^(?!.*aaa).+$ 
  • (?!.*aaa)負前瞻確保有串

Regex Demo

中沒有 aaa

發行與^.+(?!aaa).+$

  • .將匹配字符串中的第一個字符。

  • (?!aaa)檢查第一個字符是不是後跟aaa。顯然這不是我們所期望的。相反,我們需要在整個字符串中搜索字符串,而不是在第一個字符之後限制搜索。

凡爲

  • (?!.*aaa)擴展搜索整個字符串。
3
^(?:(?!aaa).)*$ 

您也可以嘗試this.See演示。

https://regex101.com/r/xO3rH2/2

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