首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PatternSyntaxException非闭群

PatternSyntaxException非闭群
EN

Stack Overflow用户
提问于 2016-06-08 07:28:58
回答 2查看 975关注 0票数 0

我有这个RegEx字符串..。

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

应该与此regex匹配的字符串测试用例:

  1. //仓库/质量/
  2. 项目\qa\
  3. //perforce_0tests 001/quality/

对此正则表达式的解释:

  1. 比赛开始
  2. group1: /或\(只有两次)
  3. group2:仓库或项目或perforce_xn,其中xn是任何数字或字母
  4. group3:只引用group1一次
  5. 问:
  6. group4:是同性恋还是
  7. group5:只引用group1一次
  8. 匹配端

这个正则表达式失败了,只有以下字符串//仓库/quality/的例外

代码语言:javascript
复制
java.util.regex.PatternSyntaxException: Unclosed group near index 64
^(/|\){2}(projects|depot|perforce_[0-9a-zA-Z]+)(\1)q(uality|a)(\1)$
                                                                ^

我的另一个问题是,我也希望在group1中允许垂直条形字符:

因此,下面的字符串也与以下字符串匹配:x_

我怎么能这么做?我不知道怎么摆脱它?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-06-08 08:43:41

代码语言:javascript
复制
String regex = "^(\\/|\\\\|\\|){2}(projects|depot|perforce_[0-9a-zA-Z]+)(\\1)q(uality|a)(\\1)$";

这个Java regex字符串对您来说应该很好。如您所见,\\|将在Java \|中解析,这是垂直条的regex转义。

票数 0
EN

Stack Overflow用户

发布于 2016-06-08 07:37:06

你有错误的规则。你应该使用:

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

这是用于java的:

代码语言:javascript
复制
String pattern = "(\\/\\/|\\\\){1}(projects|depot|(perforce_[0-9a-z]+))(\\\\|\\/)(quality|qa)(\\\\|\\/)";

效果很好。

如果您想使用||depot|quality|(在regexp中是\|),那么您应该使用以下内容:

代码语言:javascript
复制
(\/\/|\\|\||\|\|){1}(projects|depot|(perforce_[0-9a-z]+))(\\|\/|\|)(quality|qa)(\\|\/|\|)

如果你能更清楚地解释你想要什么,我就能更准确地帮助你。如果您只想匹配一个字符串,比如//depot/quality/,那么它工作得很好,但是如果您想解析大型文档,那么regexp就会有一点不同。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37695929

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档