正则表达式 - 匹配任何单词但忽略特定单词[重复]
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中路由中的特定单词?