2017-11-18 9 views
0

正規表現を使用してJavaクラスのフィールドを照合しようとしています。今のところ全体的にはうまくいっていますが、問題は1つだけです。私がフィールドにマッチすると、フィールドの名前と一致する2番目の正規表現があります。フィールドの名前と一致させるには(\w+)\s*(?:\s*=\s*[^;,]+)?を使用しますが、フィールドの値がそのフィールドの値を区切るスペースを含む大括弧で囲まれている場合は、フィールド値としてフィールド名を照合し始めます。たとえば、以下はvalue#と呼ばれ​​るすべての名前に一致しますが、値5になると、フィールドの値を区切る括弧内のスペースのため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*(?:\{[^\}]+\}|[\{;,]+))? 

この表現はまた、フィールド名が数字で始めることはできませんという事実を利用します。