【问题标题】:C# Regex to match a string that doesn't contain a certain string?C# Regex 匹配不包含特定字符串的字符串?
【发布时间】:2010-11-22 01:00:31
【问题描述】:

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

什么是正则表达式?

【问题讨论】:

  • 为什么要使用正则表达式而不使用 String.IndexOf?
  • 因为有时您的正则表达式在配置中,您无法更改代码。或者因为您需要它作为另一个更复杂的正则表达式的子表达式。或多种原因中的任何一种。您不妨问:“为什么不让您的猫通过解释性舞蹈的媒介向您模仿文本呢?”。有时您只是手头没有猫。

标签: c# regex regex-negation


【解决方案1】:

试试这个:

^(?!.*DontMatchThis).*$

【讨论】:

    【解决方案2】:

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

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

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

    模式详情

    • (?s) - 使 . 匹配任何字符的 DOTALL/单行修饰符
    • ^ - 字符串锚的开始
    • (?!.*DontMatchThis) - 一个 negative lookahead 检查是否有 0 个或多个字符(与贪婪的 .* 子模式匹配 - NOTE 一个懒惰的 .*? 版本(在下一个之前匹配尽可能少的字符)子模式匹配)如果 DontMatchThis 预计更接近字符串开头)可能会更快地完成工作)然后是 DontMatchThis
    • .* - 任何零个或多个字符,尽可能多,最多
    • $ - 字符串结尾(参见锚字符:美元 ($))。

    【讨论】:

      猜你喜欢
      • 2022-11-19
      • 2021-06-02
      • 2019-06-05
      • 2020-12-25
      • 1970-01-01
      • 1970-01-01
      • 2012-07-24
      • 1970-01-01
      • 2020-11-13
      相关资源
      最近更新 更多