2010-06-03 52 views
21

我用正則表達式將我的頭撞在牆上。我試圖定義一個完全排除這個文本'系統'的表達式(不區分大小寫),但可以包含'System'一詞,只要它不是這樣。正則表達式不等於字符串

實例:

  • 系統== INVALID
  • SYSTEM == INVALID
  • 系統== INVALID
  • 系統== INVALID
  • ASD系統==有效
  • ASD系統asd ==有效
  • 系統asd ==有效
  • ASD系統==有效
  • ASD ==有效

回答

38

試試這個:

^(?!system$) 

還是這整個線路符合:

^(?!system$).*$ 

正則表達式具有負在其開始處向前看,如果「系統」是整個字符串,則不匹配。

+0

只是出於好奇,怎麼樣?!操作員工作?我從來沒有使用過那個(儘管我用了很多正則表達式,我傾向於找到不使用「不」的解決方案)。 – Alxandr 2010-06-03 09:30:24

+1

啊,太簡單了!我確信我嘗試過......!謝謝。 – Kieron 2010-06-03 09:32:42

+1

@Alxandr - 它會檢查當前位置後面的內容。例如,'c(?!4)'將匹配來自'Doc12'的c,但不匹配'Doc42'上的c。環視無法捕獲,因此我不必擔心替換數字,或者檢查邊緣情況(例如,如果c是最後一個字符:'Doc')。 – Kobi 2010-06-03 09:36:18

4

拒絕,如果匹配^system$(確保i標誌爲ON)。

+0

這應該是第一個選項,或當然。我自然地(可能錯誤地)認爲OP不能這樣做。 – Kobi 2010-06-03 09:32:35

1
^$|^.{1-5}$|.{7}|^[^s]|^.[^y]|^..[^s]|^...[^t]|[^e].$|[^m]$ 

但是,如果可以,請使用amarghosh的答案。

(根據以下建議更新)

+0

你可能是指'。{1,5}'。 – Kobi 2010-06-03 09:46:17

+0

嘿,我寫了沒有測試它。我有點震驚,它實際上第一次嘗試。前兩個條款是多餘的,因此: (^。{1-6} $)|(。{8})|(^ [^ s])|(^。[^ y])|(^ .. [^ s])|(^ ... [^ t])|([^ e]。$)|([^ m] $) Nice tip about?!雖然 - 我沒有聽說過它。 – 2010-06-03 09:46:36

+0

oops。該正則表達式允許通過「systuem」。 (並且空字符串失敗,這顯然是可以接受的嗎?) 嘗試: ^ $ | ^。{1-5} $ |。{7} |^[^ s] | ^。[^ y] |^.. [^ s] |^... [^ t] | [^ e]。$ | [^ m] $ – 2010-06-03 09:51:23