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

Posted

技术标签:

【中文标题】正则表达式 - 匹配任何单词但忽略特定单词[重复]【英文标题】:Regex - Match any word but ignore specific word [duplicate] 【发布时间】:2018-01-02 15:46:46 【问题描述】:

我想匹配任何开始/结束或不包含单词“end”但忽略单词“end”的单词,例如:

你好 - 会匹配 男朋友 - 会匹配 无穷无尽 - 会匹配 endend - 将匹配

但是

结束 - 会匹配

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

对不起我的英语

【问题讨论】:

等等。您只想排除“结束”这个词本身?其余的都应该匹配吗? 是的,先生,这可能吗? 【参考方案1】:

试试这个:

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

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

【讨论】:

只是一个修改。您应该使用.+ 而不是.*。因为.* 将匹配零宽度。 @Rahul 好点.. 感谢您的通知 @downvoter 一个理由会很好。 巨大!如果你想排除 2 个单词 ==> ^(?!(word1|word2)$).+$【参考方案2】:

所以你想匹配任何单词,而不是“end”?

除非我有误解,否则条件语句就是所需要的一切......在伪代码中:

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

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

【讨论】:

【参考方案3】:

你可以用这个\b(?!(?:end\b))[\w]+

组件: \b -> 每个单词的单词边界的开始。 (?! 否定前瞻来消除end这个词。 (?:end\b) 带有单词结尾和单词边界的非捕获括号。 ) 负前瞻的结束标记。 [\w]+ 字符类捕捉单词。

说明:正则表达式搜索将仅查找以单词边界开头的位置,并将删除仅以单词结尾的匹配项。即[WORD BOUNDARY]end[END OF WORD BOUNDARY]\w 将捕获单词的其余部分。如果您希望捕获一些特殊字符,例如 $ 等,您可以不断增加此字符类。

【讨论】:

以上是关于正则表达式 - 匹配任何单词但忽略特定单词[重复]的主要内容,如果未能解决你的问题,请参考以下文章

使用正则表达式匹配多个逗号分隔的单词

如何使用正则表达式匹配nuxtjs,vue中路由中的特定单词?

匹配除以单词开头之外的所有内容的模式[重复]

匹配单词忽略sed中带有额外字符的相同单词

正则表达式 - 查找所有空格并忽略多行字符串中的连字符分隔的单词

如果正则表达式不包含特定单词,如何匹配它?