【问题标题】:PatternSyntaxException unclosed groupPatternSyntaxException 未封闭组
【发布时间】:2016-06-08 07:28:58
【问题描述】:

我有这个正则表达式字符串..

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

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

  1. //仓库/质量/
  2. \\projects\qa\
  3. //perforce_0tests001/quality/

这个正则表达式的解释:

  1. 比赛开始
  2. group1: / or \(只有两次)
  3. group2: depot or 项目 or perforce_xn 其中 xn 是任何数字或字母
  4. group3:仅引用 group1 一次
  5. q
  6. group4: 实体 a
  7. group5:仅引用 group1 一次
  8. 比赛结束

这个正则表达式失败,出现以下字符串异常 //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|

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

【问题讨论】:

    标签: java regex


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

    这个 Java 正则表达式字符串应该适合您。如您所见,\\| 将在 Java 中解析为 \|,这是竖线的正则表达式转义。

    【讨论】:

      【解决方案2】:

      你有一个错误的正则表达式。您应该使用:

      (\/\/|\\){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/ 这样的字符串,它可以正常工作,但如果你想解析巨大的文档,那么正则表达式会有点不同。

      【讨论】:

      • 第一部分是正确的。谢谢;第二部分:将其编辑为\\|,以便我接受您的回答
      • 我试图理解你的正则表达式,你想在你的例子的结尾使用“1”还是别的什么?我的意思是这样的://depot/quality/1 ?
      • @rz3r0,顺便说一句,你应该为 java 版本格式化我的第二个正则表达式。这是“(\\/\\/|\\\\|\\||\\|\\|){1}(projects|depot|(perforce_[0-9a-z]+))(\\\\|\\/|\\|)(quality|qa)(\\\\|\\/|\\|)"
      • no ` \1 ` 是为了反向引用组 number1 以便如果 group1 有 ` \ ` 那么 ` \1 ` 也应该有 ` \ `
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-05-30
      • 2015-09-19
      • 2019-12-24
      • 2012-12-24
      • 2013-10-29
      • 2021-01-20
      • 1970-01-01
      相关资源
      最近更新 更多