首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何为regex组绑定+/*?

如何为regex组绑定+/*?
EN

Stack Overflow用户
提问于 2012-07-06 23:25:41
回答 2查看 119关注 0票数 0

假设我有正则表达式:

代码语言:javascript
复制
(CC|NP)*

因此,它在Java中的先行正则表达式中会产生问题。我该怎么写才能避免这些问题呢?我想把它重写为:

代码语言:javascript
复制
(CC|NP){1,9}

Testing on regexr it seems like the upperbound is ignored completely.在Java语言中,这些数量层{}似乎只对非组正则表达式元素起作用,如下所示:

代码语言:javascript
复制
\w+\[\S{1,9}\]
EN

回答 2

Stack Overflow用户

发布于 2012-07-06 23:46:42

对不起,向后看模式通常对子模式有限制。请参见f.x。Why doesn't finite repetition in lookbehind work in some flavors?p。或者在网络上搜索“后视模式限制”。

你可以试着把后视模式的所有固定长度的变体写成交替模式。但这可能有很多..。

您还可以通过正常匹配内部模式来模拟后视,并对实际目标进行匹配和分组:(?:CC|NP)*(.*)

票数 1
EN

Stack Overflow用户

发布于 2012-07-07 02:16:37

我不知道你把问题放在哪里了。量词作用于组,就像任何实体一样。

所以,\w+\[\S{1,9}\]可以被写成\w+\[(\S){1,9}\],结果也是一样的。

就您在regexr上的示例而言,没有任何问题。它符合它应该做的事情。

(PUN|CC|NP){1,3}将贪婪地尝试匹配任何替代(按从左到右的优先级)。它将匹配的内容不会有任何中断。它匹配1-3个连续出现的双关语或CC或NP。

您提供的示例字符串在CC之间有一个空格,因此由于正则表达式中不存在空格,因此它不匹配。唯一匹配的是单个CC

如果您要考虑某个空间,可以将其添加到分组中,如下所示:

(?:(?:PUN|CC|NP)\s*){1,3}

如果你想在交替之间只允许空格,可以这样做:

(?:PUN|CC|NP)(?:\s*(?:PUN|CC|NP)){0,2}

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

https://stackoverflow.com/questions/11365159

复制
相关文章

相似问题

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