我有这个正则表达式字符串。
String regex = ^(/|\){2}(projects|depot|perforce_[0-9a-zA-Z]+)(\1)q(uality|a)]+)(\1)$
应与此正则表达式匹配的字符串测试用例:
- //
- 仓库/质量/ \\
- 项目\qa\ /
- /perforce_0tests001/质量/
此正则表达式的解释:
- 比赛开始
- 组 1:/或 \(仅两次)
- 组 2:仓库或项目或perforce_xn其中 xn 是任何数字或字母
- 组 3:仅引用组 1 一次
- 问
- 第 4 组:属性或
- 组 5:仅引用组 1 一次
- 比赛结束
此正则表达式失败,出现以下异常,字符串//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/,它工作正常,但如果你想解析巨大的文档,那么正则表达式会有点不同。