正则表达式 - 匹配任何单词但忽略特定单词

10
我希望匹配任何以单词 "end" 开头/结尾或不包含单词 "end" 但忽略单词 "end",例如:
  • hello - 匹配
  • boyfriend - 匹配
  • endless - 匹配
  • endend - 匹配

但是

  • end - 不会 匹配

我正在使用 ^(?!end)).*$ 但这不是我想要的。

抱歉我的英语


2
等一下,你只是想排除单词“end”本身吗?其他的都应该匹配吗? - Robby Cornelissen
先生,这个可能吗? - moebarox
3个回答

13

试试这个:

^(?!(end)$).+$

这将匹配除结尾之外的所有内容。


3
只需做出修改。您应该使用.+代替.*,因为.*会匹配零宽度。 - Rahul
1
@Rahul 很好的观点.. 感谢您的通知。 - NID
1
@downvoter 给一个理由会更好。 - NID
1
巨大!如果你想排除两个单词 ==> ^(?!(word1|word2)$).+$ - Deunz

0

所以你想匹配任何单词,但不包括 "end" 吗?

除非我误解了,条件语句就是需要的一切... 伪代码如下:

if (word != "end") {
    // Match
}

如果您想匹配文本中所有不是"end"的单词,您可以删除所有非字母字符,用空字符串替换模式(^end | end | end$),然后进行字符串拆分。 其他使用单个正则表达式的答案可能更好,因为正则表达式匹配是O(n), 无论模式如何。

0

您可以使用此正则表达式:\b(?!(?:end\b))[\w]+

组成部分: \b -> 每个单词的单词边界起始位置。 (?! 负向先行断言,用于排除单词end(?:end\b) 非捕获括号,包含单词end和单词边界。 ) 负向先行断言的结束标记。 [\w]+ 字符类,用于捕获单词。

解释:该正则表达式只会查找以单词边界开头的位置,并且会删除仅为end的匹配项。即 [单词边界]end[单词边界结尾]\w 将捕获其余的单词。如果您希望捕获一些特殊字符(如 $ 等),则可以不断增加此字符类。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接