【问题标题】:Regular expression not matching specific string正则表达式与特定字符串不匹配
【发布时间】:2009-12-10 15:10:15
【问题描述】:

我的用例如下:我想找到所有与/name.action类似的东西,但最后一部分不是.action,例如:

  • name.actoin - 应该匹配
  • name.action - 不应匹配
  • nameaction - 不应匹配

我有这个:
/\w+.\w*
匹配由点分隔的两个单词,但我不知道如何添加'并且不匹配.action'。

【问题讨论】:

    标签: regex


    【解决方案1】:

    首先,您需要转义您的 . 字符,因为它在正则表达式中被视为 any character。

    其次,您需要添加 Match if suffix is not present 组 - 由 (?!) 语法表示。

    您可能还想添加一个抑扬符^ 来表示新行的开始,并将您的*(任何重复)更改为+(一个或多个重复)。

    ^/\w+\.(?!action)\w+ 是完成的正则表达式。

    【讨论】:

    • 在大多数正则表达式实现中,. 不匹配 \r 和 \n。
    • \w 是否仅适用于 ASCII 取决于所使用的编程语言,有时还取决于正则表达式编译标志——例如,在某些情况下,您需要 /u 或 (?u),而在其他情况下 (像 Java),即使这样也不足以包含 Unicode 字母数字。
    【解决方案2】:
    ^\w+\.(?!action)\w*
    

    【讨论】:

      【解决方案3】:

      你需要转义点字符。

      【讨论】:

      • 这只是问题的一小部分。
      【解决方案4】:
      \w+\.(?!action).*
      

      注意尾随的.* 不确定在操作文本之后要做什么。

      另见Regular expression to match string not containing a word?

      【讨论】:

        【解决方案5】:

        您需要使用zero-width negative lookahead assertion。这将使您在字符串中向前看,并根据单词的否定进行匹配。

        所以你需要的正则表达式(包括转义的 . 字符)看起来像:

        /name\.(?!action)/
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2014-10-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多