2009-08-23 218 views
20

我想匹配任何確實不是的字符串包含字符串「DontMatchThis」。C#正則表達式匹配不包含某個字符串的字符串?

什麼是正則表達式?

+0

你爲什麼要用正則表達式來做這件事,而不是使用String.IndexOf? – 2009-08-23 10:54:22

+12

因爲有時你的正則表達式是在配置中,你不能改變代碼。或者因爲你需要它作爲另一個更復雜的正則表達式的子表達式。或者任何一種原因。你可能會問:「你爲什麼不通過解釋性舞蹈的媒介讓你的貓把你的文本模仿給你?」。有時你只是沒有你的貓。 – 2015-01-06 17:55:36

回答

45

試試這個:

^(?!.*DontMatchThis).*$ 
+11

請解釋一下。這是如何工作的? – bikashg 2013-09-02 08:43:18

+0

@bikashg:看到這裏:http://stackoverflow.com/a/11125488/47190 – 2013-10-07 09:56:55

11

正則表達式匹配不包含特定模式的字符串

(?s)^(?!.*DontMatchThis).*$ 

如果使用未經(?s)模式(這是一個在線版本RegexOptions.Singleline標誌使.匹配一個換行LF符號以及所有其他字符),DontMatchThis將只在第一行被搜索,並且只有沒有LF符號的字符串將與匹配。

圖案的詳細資料

  • (?s) - 一個DOTALL /單線修飾使得.匹配任何字符
  • ^ - 字符串錨開始
  • (?!.*DontMatchThis) - 一個negative lookahead如果有任何0或檢查更多字符(匹配貪婪.*子模式 - 注意懶惰.*?版本(如果DontMatchThis預計會接近字符串開頭,則可能會更快地完成作業)(接下來是DontMatchThis
  • .* - 任何零個或多個字符儘可能多,最多
  • $ - 字符串結尾(請參閱錨字符:美元($)。
+1

這是接受答案的好補充。 – VMAtm 2016-11-19 02:10:14

相關問題