2016-12-27 89 views
1

我想在與模式匹配後提取用逗號分隔的所有值(,)。從字符串中提取用逗號分隔的字符串的正則表達式

因此,首先我將字符串與正則表達式匹配,然後使用Matcher來提取值。

Regex =\(([^)]+)\)正確匹配string後沒有任何問題。

('A', '36254632546', 0, 'Test, test1', NULL) 

但無法匹配字符串convert(datetime, 'Dec 27 2016 10:36:54', 116)在原始字符串中可用。我試圖通過將$最後)匹配,但似乎不工作。

字符串匹配=('A', convert(datetime, 'Dec 27 2016 10:36:54', 116), 0, 'Test, test1', NULL)

+3

請參見[如何匹配Java中括號(嵌套)中的字符串?](http://stackoverflow.com/questions/17759004/how-to-match-string-within-parentheses-nested-in-java)。此外,[此片段](http://stackoverflow.com/a/372​​07892/3832970)可能會幫助你。如果嵌套級別數字是任意的,則不能使用正則表達式,因爲Java正則表達式不支持遞歸。 –

+0

你似乎在解析一些編程語言。你確定正則表達式能夠匹配所有可能的輸入嗎? – GhostCat

+0

請嘗試在此https://regex101.com/ – amicngh

回答

3

這是因爲你的正則表達式停止在第一個 ')'。

你在正則表達式中所說的是以'('開始,然後將'''除以''''''''''''然後它會停止,即使您將美元符號放在末尾,因爲末尾不存在,您仍有字符串之後的第一個')'。

'+'號用於連續的字符。

如果你想匹配所有你要告訴像

\\(([^)]+\\)[^)]+)\\);

繩子,但這個與你的程序的邏輯來做。

此外,如果你想要多組逗號,你必須改變你的正則表達式,以便這些組是逗號組。

相關問題