2011-10-07 131 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