我有这个RegEx String ..
String regex = ^(/|\\){2}(projects|depot|perforce_[0-9a-zA-Z]+)(\\1)q(uality|a)]+)(\\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中允许竖条字符:|
以下字符串也匹配:|| depot | quality |
我该怎么做?我不知道怎么逃避它?
答案 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中解析为\|
,这是垂直条的正则表达式转义。