【发布时间】:2009-12-10 15:10:15
【问题描述】:
我的用例如下:我想找到所有与/name.action类似的东西,但最后一部分不是.action,例如:
- name.actoin - 应该匹配
- name.action - 不应匹配
- nameaction - 不应匹配
我有这个:/\w+.\w*
匹配由点分隔的两个单词,但我不知道如何添加'并且不匹配.action'。
【问题讨论】:
标签: regex
我的用例如下:我想找到所有与/name.action类似的东西,但最后一部分不是.action,例如:
我有这个:/\w+.\w*
匹配由点分隔的两个单词,但我不知道如何添加'并且不匹配.action'。
【问题讨论】:
标签: regex
首先,您需要转义您的 . 字符,因为它在正则表达式中被视为 any character。
其次,您需要添加 Match if suffix is not present 组 - 由 (?!) 语法表示。
您可能还想添加一个抑扬符^ 来表示新行的开始,并将您的*(任何重复)更改为+(一个或多个重复)。
^/\w+\.(?!action)\w+ 是完成的正则表达式。
【讨论】:
. 不匹配 \r 和 \n。
\w 是否仅适用于 ASCII 取决于所使用的编程语言,有时还取决于正则表达式编译标志——例如,在某些情况下,您需要 /u 或 (?u),而在其他情况下 (像 Java),即使这样也不足以包含 Unicode 字母数字。
^\w+\.(?!action)\w*
【讨论】:
你需要转义点字符。
【讨论】:
\w+\.(?!action).*
注意尾随的.* 不确定在操作文本之后要做什么。
【讨论】:
您需要使用zero-width negative lookahead assertion。这将使您在字符串中向前看,并根据单词的否定进行匹配。
所以你需要的正则表达式(包括转义的 . 字符)看起来像:
/name\.(?!action)/
【讨论】: