【问题标题】:Javascript to Java regex not workingJavascript 到 Java 正则表达式不起作用
【发布时间】:2015-07-14 11:16:30
【问题描述】:

我的正则表达式如下:

\[(((".*?")|([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, "Alfa"], [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 作为构建词法分析器的工具

【问题讨论】:

  • 数字前面的那些\字符是什么意思?
  • 你只需要转义正则表达式元字符。
  • Java 在 RegEx 方面略有不同。上一篇文章有​​一个差异列表stackoverflow.com/questions/8754444/…
  • 发布一个输入字符串和你的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*|(, ?\\1))?)*[^, ]+\\]

标签: java javascript regex jflex


【解决方案1】:

我不知道你想用这么长的正则表达式实现什么,但下面的代码是从 javascript 到 Java 正则表达式的转换:

\\[(((\".*?\")|([a-z][\\p{L}\\p{N}_]*|[^0-9a-z,\\[\\]A-Z\\p{Z}\t\n\\f\r]+|'(.*?)')|([+-]?[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}\t\n\\f\r])|[\\p{Z}\t\n\\f\r]*|(, ?\\1))?)*[^, ]+\\] 

【讨论】:

    【解决方案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))?)*[^, ]+\\]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-16
      • 1970-01-01
      • 1970-01-01
      • 2014-05-30
      • 2021-06-18
      相关资源
      最近更新 更多