REGEX匹配(1 | 2),不包含(3 | 4)

时间:2018-08-17 10:18:36

标签: regex preg-match

我知道我今天早些时候刚刚问过一个类似的问题,但是看到它似乎很容易解决,这让我想到了一些更复杂的事情是可以实现的!我的括号中带有“区域”的字符串。我想将所有字符串与例如JapanBrazil匹配,但如果它们包含例如USAEuropeUK,则不匹配。因为它们都以(或空格开头,然后以,)开头,所以非常棘手!

此刻,我必须进行两次单独的匹配才能匹配JapanBrazil,然后确保我没有匹配USAEurope或{ {1}}。

输入:

UK

我正在使用的正则表达式:

MatchMe! (Japan)
MatchMe! (Japan, Brazil)
MatchMe! (Brazil, Japan)
MatchMe! (Other, Japan, Other)
Don'tMatchMe! (Japan, USA)
Don'tMatchMe! (USA, Japan)
Don'tMatchMe! (Brazil, USA, Japan)
Don'tMatchMe! (USA)

演示:

https://regex101.com/r/h17uZ2/1

1 个答案:

答案 0 :(得分:2)

将非括号字符的正向正向组合起来,后跟Japan|Brazil,对于负号则组合为反向正向,但是用USA|Europe|UK代替:

\((?=[^)]*(Japan|Brazil))(?![^)]*(USA|Europe|UK))[^)]+\)

https://regex101.com/r/h17uZ2/2