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

时间:2014-08-14 19:54:59

标签: regex perl string-matching

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

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

我希望这会解决它,因为我使用负向前瞻但似乎没有做到这一点。

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

我认为我做了一些根本错误的事情,但现在看不到它。

有任何帮助吗?

2 个答案:

答案 0 :(得分:4)

这个正则表达式适合你:

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

RegEx Demo

答案 1 :(得分:1)

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

例如,使用此正则表达式:

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

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

<强> Working demo

enter image description here

想法是使用:

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