字段和变量的正则表达式

字段和变量的正则表达式

问题描述:

我想使用正则表达式在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

试试这个:

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

这种表达也需要这样一个事实字段名称不能以数字开头的优势。