字段和变量的正则表达式
问题描述:
我想使用正则表达式在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
};
答
试试这个:
([a-zA-Z_]\w*)(?:\s*=\s*(?:\{[^\}]+\}|[\{;,]+))?
这种表达也需要这样一个事实字段名称不能以数字开头的优势。
正则表达式不足以解析复杂的编程语言,您通常需要编写一个递归下降解析器。 – Barmar