我的正则表达式如下:
\[(((".*?")|([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))?)*[^, ]+\]
该正则表达式的目标是查找“列表”是否存在。列表可能包含:空列表([]、数字、'方法,您可以在其中传递参数'、符号、简单引号之间的字符串、变量等......几乎任何东西)。
它必须匹配以下测试用例:(不包括逗号)
[], [hola, 23, "阿尔法"], [A,b,c(x), d]
我让它在 regexr.com 上工作,据我所知,它使用 js 正则表达式,但是当将正则表达式转换为 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 作为构建词法分析器的工具