2011-10-07 296 views
0

例赛结束支架:只有当它存在

a) asdf ghjk (qwer . - tzui 
b) asdf ghjk (qwer . - tzui) 
c) asdf ghjk (qwer . - tzui) opyx 

我想是在B和C匹配一个(qwer . - tzui(qwer . - tzui)。所以如果存在结尾括号,它应该只匹配直到结束,否则直到结束。

我不是一个真正的正则表达式专家,所以我只能想出\(.*\)第二个和第三个案例,这是非常平凡的。

+0

括号可以嵌套吗?如果是这样,请准备好一些困难。 –

+0

幸运的是不是:) – letmaik

回答

1

试试这个

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

见这里online on Regexr

?使得以前的表达式可选,这意味着右括号现在是可选的。

[^)\n\r]将您的.替换为非贪婪匹配,并意味着匹配每个字符,但)\n\r。我添加了\n\r以避免匹配横排,如果这是现在的问题,您可以删除它们并只留下[^)]

+0

这个工程!但为什么'\ n \ r'?我认为在我的情况下(只有一行)并不是真的有必要。 – letmaik

+0

在我对Regexr的测试中,它从第一行到第二行的“b)”进行匹配。如果你只有一条线路,你不需要它。 – stema

0

在正则表达式的正确位置使用\\)?,以匹配右括号(如果存在的话)(或者如果不存在则不匹配)。

完整的正则表达式应该是这样的:

\\(.*\\)? 

(如果正则表达式是要输入作为一个Java字符串需要双反斜线)。

-1

要非常simplist,你可以这样做:

\(.*\)? 

,这样最后一个括号变为可选。让我知道这是否适合你。

+1

好吧,但它也匹配任何我不想要的最后一个pamental之后的任何东西。 – letmaik

相关问题