PatternSyntaxException未闭合组

时间:2016-06-08 07:28:58

标签: java regex

我有这个RegEx String ..

String regex = ^(/|\\){2}(projects|depot|perforce_[0-9a-zA-Z]+)(\\1)q(uality|a)]+)(\\1)$

应与此正则表达式匹配的字符串测试用例:

  1. //仓库/质量/
  2. \\项目\ QA \
  3. // perforce_0tests001 /质量/
  4. 此正则表达式的说明:

    1. 匹配开始
    2. group1:/ \(仅两次)
    3. group2:depot 项目 perforce_xn,其中xn是任意数字或字母
    4. group3:仅引用group1
    5. q
    6. group4:uality a
    7. group5:仅引用group1
    8. 匹配结束
    9. 使用字符串// depot / quality /

      时,此正则表达式失败并出现以下异常
      java.util.regex.PatternSyntaxException: Unclosed group near index 64
      ^(/|\){2}(projects|depot|perforce_[0-9a-zA-Z]+)(\1)q(uality|a)(\1)$
                                                                      ^
      


      我的另一个问题是我还想在group1中允许竖条字符:|

      以下字符串也匹配:|| depot | quality |

      我该怎么做?我不知道怎么逃避它?

2 个答案:

答案 0 :(得分:0)

你的正则表达式错误。你应该使用:

(\/\/|\\){1}(projects|depot|(perforce_[0-9a-z]+))(\\|\/)(quality|qa)(\\|\/)

这是针对java:

String pattern = "(\\/\\/|\\\\){1}(projects|depot|(perforce_[0-9a-z]+))(\\\\|\\/)(quality|qa)(\\\\|\\/)";

工作正常。

如果您想使用||depot|quality|(在正则表达式中为\|),则应使用以下内容:

(\/\/|\\|\||\|\|){1}(projects|depot|(perforce_[0-9a-z]+))(\\|\/|\|)(quality|qa)(\\|\/|\|)



如果你更清楚地解释你想要什么,那么我可以更准确地帮助你。如果你只想匹配一个像// depot / quality /这样的字符串,它可以正常工作,但是如果你想解析庞大的文档,那么regexp会有点不同。

答案 1 :(得分:0)

String regex = "^(\\/|\\\\|\\|){2}(projects|depot|perforce_[0-9a-zA-Z]+)(\\1)q(uality|a)(\\1)$";

这个Java正则表达式字符串应该可以正常工作。如您所见,\\|将在Java中解析为\|,这是垂直条的正则表达式转义。