RegEx有3个括号和中间的东西

时间:2014-08-07 13:05:35

标签: regex

我想制定一个RegEx来找到这样的模式:

()()(x) 要么 ( ) (X) ( ) 要么 (x)()()

在单词中:找到三个打开的​​近括号,其中一个位于其中一个的中间。我可以做三个正则表达式模式,不需要一个一个。

这将代表操作机器,备用机器和维护机器。所以,我正在寻找3种不同的Regex公式,以找到每种模式。我做了一些改进,但没有做到这么远。 我尝试了什么:

\([^\(\r\n]*\)*\([^\(\r\n]*\)*\([^\(\r\n]*\)
\([^\(\r\n]\) \([^\(\r\n]*\) \([^\(\r\n]*\)

但是没有抓住我所有的困难。

我做了一些"测试用例":

aaaaaaaaaa()xsadasds(X)dsadasdas()dsdadas
()()(x)
(y)    ()   ()
( ) (duo) ( )
( ) (x )  ( )
()()()
()dasdsa()dasdas()
(kwabanga)()()

我希望在以下模式中找到,即分别具有匹配:

()(x)() => MATCH aaaaaaaaaa()xsadasds(X)dsadasdas()dsdadas
()()(x) => MATCH ()()(x)
(x)()() => MATCH (y)    ()   ()
()(x)() => MATCH ( ) (ANYTHING) ( )
()(x)() => MATCH ( ) (x )  ( )
dont find anything
dont find anything
(x)()() => MATCH (kwabanga)()() 

我清楚了吗?我不确定如何处理,因为我使用RegEx这样的n00b。

提前致谢!

2 个答案:

答案 0 :(得分:1)

<强> 更新

试试这个:

(?!(\(\s*\).*?){3})(\([^)]*\).*?){3}

我在PCRE环境中检查了上面的正则表达式,但我认为它也兼容VBA。

Live demo

答案 1 :(得分:0)

如果你真的没有三个单独的正则表达式,你可以尝试这样的东西:

\(.+?\)\(.*?\)\(.*?\) # matches on (x)()()
\(.*?\)\(.+?\)\(.*?\) # matches on ()(x)() 
\(.*?\)\(.*?\)\(.+?\) # matches on ()()(x)