2009-08-23 462 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

相关问题