2015-09-03 50 views
1

字符串我知道三件事...如何否定的正則表達式

1)我知道:

a.{1,250}?z 

將檢查一個是內部的z 250個字符。

2)我知道,

a[^b]{1,250}?z 

將檢查一個是內部的z 250個字符,但事實是沒有任何字符設爲b。

3)我也知道

a[^bad]{1,250}?z 

將檢查一個是內的z 250個字符,但沒有這些字符的是B,A,或d。

4)

如何哇我會檢查一中的z 250個字符的發生,但說不好這個詞並不在它們之間出現?

想象「串」要求精確匹配(如在谷歌搜索)的僞代碼如下所示:

a[^"bad"]{1,250}?z 

回答

3

簡單,使用ngeative前瞻。

a(?:(?!bad).){1,250}?z 

(?:(?!bad).)會匹配任何字符(除換行符),但不是子bad的。

DEMO

,你也必須使用錨或字邊界,爲了做到精確匹配或以其他方式,上述正則表達式將這個acbadccz輸入相匹配adccz

\ba(?:(?!bad).){1,250}?z\b 
+0

這是完美的。 – COMisHARD

+0

不完全*常規*(lookaheads是一個擴展名),但我不確定這可以通過純正則表達式在技術上解決...所以你從我+1得到的:) – Sebivor

+0

@Seb,負向預測可以完全解決使用普通的正則表達式,但通常情況下,匹配確切字符串的正則表達式比原始字符串複雜得多。這就是延伸的原因。使用有窮自動機可以很容易地演示,但在時間和空間之外。 –