C#正则表达式匹配不包含某个字符串的字符串?
试试这个:
^(?!.*DontMatchThis).*$
请解释一下。这是如何工作的? – bikashg 2013-09-02 08:43:18
@bikashg:看到这里:http://stackoverflow.com/a/11125488/47190 – 2013-10-07 09:56:55
正则表达式匹配不包含特定模式的字符串
(?s)^(?!.*DontMatchThis).*$
如果使用未经(?s)
模式(这是一个在线版本RegexOptions.Singleline
标志使.
匹配一个换行LF符号以及所有其他字符),DontMatchThis
将只在第一行被搜索,并且只有没有LF符号的字符串将与匹配。
图案的详细资料:
-
(?s)
- 一个DOTALL /单线修饰使得.
匹配任何字符 -
^
- 字符串锚开始 -
(?!.*DontMatchThis)
- 一个negative lookahead如果有任何0或检查更多字符(匹配贪婪.*
子模式 - 注意懒惰.*?
版本(如果DontMatchThis
预计会接近字符串开头,则可能会更快地完成作业)(接下来是DontMatchThis
-
.*
- 任何零个或多个字符尽可能多,最多 -
$
- 字符串结尾(请参阅锚字符:美元($
))。
这是接受答案的好补充。 – VMAtm 2016-11-19 02:10:14
你为什么要用正则表达式来做这件事,而不是使用String.IndexOf? – 2009-08-23 10:54:22
因为有时你的正则表达式是在配置中,你不能改变代码。或者因为你需要它作为另一个更复杂的正则表达式的子表达式。或者任何一种原因。你可能会问:“你为什么不通过解释性舞蹈的媒介让你的猫把你的文本模仿给你?”。有时你只是没有你的猫。 – 2015-01-06 17:55:36