私の正規表現は次のとおりです。
\[(((".*?")|([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 をツールとして使用して字句解析器を構築しています