C#Regex匹配不包含某个字符串的字符串?

时间:2009-08-23 10:51:29

标签: c# regex regex-negation

我想匹配任何包含字符串“DontMatchThis”的字符串。

什么是正则表达式?

2 个答案:

答案 0 :(得分:46)

试试这个:

^(?!.*DontMatchThis).*$

答案 1 :(得分:23)

匹配不包含特定模式的字符串的正则表达式是

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

如果您使用的模式没有(?s)(这是RegexOptions.Singleline标志的内联版本,使.匹配换行符号以及所有其他字符),只会在第一行搜索DontMatchThis,只有没有LF符号的字符串才会与.*匹配。

模式详情

  • (?s) - 使.与任何角色匹配的DOTALL /单线修改器
  • ^ - 字符串锚的开始
  • (?!.*DontMatchThis) - negative lookahead检查是否有0个或更多字符(与贪婪.*子图案匹配 - 注意懒惰.*?版本(在下一个子模式匹配之前匹配尽可能少的字符)可能会更快地完成工作,如果预期DontMatchThis更接近字符串开头,则跟随DontMatchThis
  • .* - 任意零个或多个字符,尽可能多,最多
  • $ - 字符串的结尾(请参阅主播字符:美元($)。