-2

私の正規表現は次のとおりです。

\[(((".*?")|([a-z][\w]*|[^0-9a-z,\[\]A-Z\s]+|'(.*?)')|([+-]?[0-9]+)|([+-]?(\.[0-9]+|[0-9]\.[0-9]*|[0-9]\.))|([+-]?([0-9]*?\.[0-9]+|[0-9]+)[Ee][+-]?[0-9]+)|([A-Z][\w]*)|(\4\((\1|\2|\3|\4|\5|\6|\7|\8|\9|\10|\11|\12)*)\))((\s)|\s*|(, ?\1))?)*[^, ]+\]

その正規表現の目的は、「リスト」が存在するかどうかを調べることです。リストには以下を含めることができます: 空のリスト( []、数値、「引数を渡すことができるメソッド」、シンボル、単純な引用符で囲まれた文字列、変数など...ほとんど何でも)。

また、次のテスト ケースに一致する必要があります: (カンマは含まれません)

[]、[ほら、23、「アルファ」]、[A、b、c(x)、d]

私が理解しているようにjs正規表現を使用しているregexr.comで動作しましたが、正規表現をJavaに変換すると、同じテストケースを識別できません。なぜこれが起こっているのかについての手がかりはありますか?

\\[(((\".*?\")|([a-z][\\w]*|[^0-9a-z,\\[A-Z\\s]+|'(.*?)')|([+-]?[0-9]+)|([+-]?(\\.[0-9]+|[0-9]\\.[0-9]*|[0-9]\\.))|([+-]?([0-9]*?\\.[0-9]+|[0-9]+)[Ee][+-]?[0-9]+)|([A-Z][\\w]*)|(\\4\\((\\1|\\2|\\3|\\4|\\5|\\6|\\7|\\8|\\9|\\10|\\11|\\12)*)\\))((,\\s)|\\s?))*\\]

java変換した正規表現↑(冒頭と末尾の引用は除く)

jflex をツールとして使用して字句解析器を構築しています

4

2 に答える 2

0

次のエスケープされた正規表現を試してください。

\\[(((\".*?\")|([a-z][\\w]*|[^0-9a-z,\\[\\]A-Z\\s]+|'(.*?)')|([+-]?[0-9]+)|([+-]?(\\.[0-9]+|[0-9]\\.[0-9]*|[0-9]\\.))|([+-]?([0-9]*?\\.[0-9]+|[0-9]+)[Ee][+-]?[0-9]+)|([A-Z][\\w]*)|(\\4\\((\\1|\\2|\\3|\\4|\\5|\\6|\\7|\\8|\\9|\\10|\\11|\\12)*)\\))((\\s)|\\s*|(, ?\\1))?)*[^, ]+\\]
于 2015-05-04T22:13:21.760 に答える