正则表达式匹配多个字符串但不匹配特定字符串

Posted

技术标签:

【中文标题】正则表达式匹配多个字符串但不匹配特定字符串【英文标题】:Regex to match several strings but not specific ones 【发布时间】:2014-10-08 14:32:01 【问题描述】:

我正在使用 Perl 来搜索和匹配每行中符合条件的字符串,并希望省略包含特定字符串的行。 我的意思是: 假设我正在匹配字符串 Mouse,但如果该行匹配 X123Y,我想省略。任何一个字符串都可以在该行的任何位置找到。

*** Mouse forum.       <--Match
*** -Mouse- forum.     <--Match
*** X123Y forum Mouse. <--Should not Match
*** XYZ forum Mouse.   <--Should not Match

我希望这能解决它,因为我使用的是负前瞻,但似乎没有奏效。

(?i)(\WMouse\W|(?!(X123Y|XYZ)).*$)

我想我在做一些根本错误的事情,但现在看不到。

有什么帮助吗?

【问题讨论】:

【参考方案1】:

这个正则表达式应该适合你:

^(?=.*?Mouse)(?:(?!(?:X123|XYZ)).)*$

RegEx Demo

【讨论】:

只需查看演示链接中的正则表达式描述,了解有关此正则表达式的所有详细信息。之后,请随时提出任何问题,我会在这里回答。【参考方案2】:

您可以使用丢弃技术来保留您想要的内容并丢弃您不想要的模式。

例如,使用这个正则表达式:

.*X123Y.*|.*XYZ.*|(.*Mouse.*)

您将获取最正确模式的内容并丢弃其他模式..

Working demo

这个想法是使用:

discard patt 1 | discard patt 2 | discard patt n | (grab this pattern)

【讨论】:

以上是关于正则表达式匹配多个字符串但不匹配特定字符串的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式,匹配特定字符后面的内容

js正则表达式 匹配两个特定字符间的内容

用正则表达式怎样匹配 不包含特定字符串的字符串

linux学习---通配符与正则表达式

正则表达式:匹配指定字符后面的字符怎样实现?

求教正则表达式如何匹配