模式语法异常未关闭组



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

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

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

    //
  1. 仓库/质量/
  2. \\
  3. 项目\qa\
  4. /
  5. /perforce_0tests001/质量/

此正则表达式的解释:

  1. 比赛开始
  2. 组 1:/ \(仅两次)
  3. 组 2:仓库或项目perforce_xn其中 xn 是任何数字或字母
  4. 组 3:仅引用组 1 一次
  5. 第 4 组:属性
  6. 组 5:仅引用组 1 一次
  7. 比赛结束

此正则表达式失败,出现以下异常,字符串//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 中允许竖线字符:|

因此,以下字符串也匹配:||仓库|质量|

我该怎么做?我不知道如何逃脱它?

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

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

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

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

最新更新