我的正则是如下:
[(((".*?")|([a-z][w]*|[^0-9a-z,[]A-Zs]+|'(.*?)')|([+-]?[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," alfa"],[a,b,c(x),d],d]
我在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转换为正则↑(从头开始和结束的引号)
IM使用JFLEX作为构建词汇分析仪的工具
请尝试以下逃脱的正则表达式:
\[(((".*?")|([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))?)*[^, ]+\]
我不知道您要用这么长的正则要实现什么,但是下面的代码是从JavaScript到Java Regex的转换:
\[(((".*?")|([a-z][\p{L}\p{N}_]*|[^0-9a-z,\[\]A-Z\p{Z}tn\fr]+|'(.*?)')|([+-]?[0-9]+)|([+-]?(\.[0-9]+|[0-9]\.[0-9]*|[0-9]\.))|([+-]?([0-9]*?\.[0-9]+|[0-9]+)[Ee][+-]?[0-9]+)|([A-Z][\p{L}\p{N}_]*)|(\4\((\1|\2|\3|\4|\5|\6|\7|\8|\9|\10|\11|\12)*)\))(([\p{Z}tn\fr])|[\p{Z}tn\fr]*|(, ?\1))?)*[^, ]+\]