2017-11-18 40 views
0

我想使用正則表達式在Java類中匹配字段。到目前爲止,它一直在努力工作,但只有一個問題。一旦我匹配一個字段,然後我有第二個正則表達式匹配字段的名稱。我使用(\w+)\s*(?:\s*=\s*[^;,]+)?來匹配字段的名稱,但是如果字段的值用括號括起來,並用空格分隔該字段的值,則會開始將字段值與字段名稱進行匹配。例如,下面的內容匹配所有名稱爲value#的名稱,但是,一旦它變爲value5,2就會被匹配,因爲括號內的空格將字段值分開。如果可能的話,我需要一種方法來在括號內不匹配空格,同時仍然完成當前與值1-4相匹配的內容。即使是一個能夠正確匹配5號值但是會讓6號和7號陷入困境的解決方案也會是一個值得歡迎的改進。字段和變量的正則表達式

示例代碼:

value1; 
value2 = 3; 
value3 = 4, value4 = 4; 
value5 = { 
    1, 2 
}; 
value6 = { 
    1, 2 
}, value7 = { 
    1, 2 
}; 
+0

正則表達式不足以解析複雜的編程語言,您通常需要編寫一個遞歸下降解析器。 – Barmar

回答

0

試試這個:

([a-zA-Z_]\w*)(?:\s*=\s*(?:\{[^\}]+\}|[\{;,]+))? 

這種表達也需要這樣一個事實字段名稱不能以數字開頭的優勢。