正则表达式:匹配模式但排除一种情况[重复]

Posted

技术标签:

【中文标题】正则表达式:匹配模式但排除一种情况[重复]【英文标题】:Regex: Match a pattern but exclude one case [duplicate] 【发布时间】:2014-09-05 19:36:54 【问题描述】:

我想包含从 a 到 m 的所有字符串。 这可以使用 [a-m]* 正则表达式来完成 但我不希望字符串以“deal_string”开头的情况。这个的正则表达式是什么?

测试用例:

assets/filename.ext           -> pass
deal_string/filename.ext      -> fail
deal_string.ext               -> fail
deal_string_1.ext             -> fail
deal_draft.txt                -> pass
assets_deal_string.txt        -> pass
bombay.txt                    -> pass
zombie.srt                    -> fail
some_deal_string.txt          -> fail
zobie_special_string.txt      -> fail

【问题讨论】:

如果您想包含从am 的所有字符串,那么所有其他情况如何通过?除了special_string 之外,唯一应该通过的是assets/filename.extbombay.txt @Yesuagg:你用什么语言/工具做这个正则表达式? @hwnd:我的错。更新了测试用例。 @anubhava:Ruby on rails 【参考方案1】:

在此处使用否定预测。如果要匹配所有以am 开头的字符串,不包括以“deal_string”开头的字符串,您可以使用:。

^(?!deal_string)[a-m].*$

Live Demo

【讨论】:

以上是关于正则表达式:匹配模式但排除一种情况[重复]的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式:一种特殊情况不匹配[重复]

正则表达式:匹配除一个单词之外的所有内容[重复]

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

.NET 正则表达式匹配重复字符[重复]

使用正则表达式匹配模式后排除子字符串

Redshift 正则表达式匹配直到模式匹配但不包含模式