2010-03-25 21 views
4

我有一個正則表達式問題,我試圖忽略數字'41',我想要4,1,14等全部匹配。正則表達式否定匹配查詢

我有了這個[^\b41\b]這是有效的我想要什麼,但這個也忽略值1和4

作爲一個例子,這個「41」匹配的所有單次迭代,但我希望它不比賽: \ B41 \ b

回答

5

試着這麼做:

\b(?!41\b)(\d+) 

(?!...)結構是一個negative lookahead所以這意味着:找一個字的邊界是後跟「41」並在其後面捕獲一系列數字。

+0

歡呼傢伙,現場 – Matt 2010-03-25 15:12:17

1

你可以使用一個負look-ahead assertion排除41

/\b(?!41\b)\d+\b/ 

這個正則表達式被解釋爲:在任何字邊界\b,如果後面沒有41\b(?!41\b)),匹配一個或更多數字後跟一個字邊界。

或與同一負look-behind assertion

/\b\d+\b(?<!\b41)/ 

該正則表達式被解釋爲:匹配由字邊界包圍的一個或多個數字,但只有當子在的端部比賽之前沒有\b41(?<!\b41))。

甚至可以只使用基本的語法:

  • 一個個位數
  • 兩個數字沒有這樣的:

    /\b(\d|[0-35-9]\d|\d[02-9]|\d{3,})\b/ 
    

    這隻能通過任一字邊界包圍的數字序列相匹配一個4在第一位置或不在第二位置1

  • 三位或更多位
+0

歡呼傢伙,現場 – Matt 2010-03-25 15:11:30