假设我有正则表达式:
(CC|NP)*因此,它在Java中的先行正则表达式中会产生问题。我该怎么写才能避免这些问题呢?我想把它重写为:
(CC|NP){1,9}Testing on regexr it seems like the upperbound is ignored completely.在Java语言中,这些数量层{}似乎只对非组正则表达式元素起作用,如下所示:
\w+\[\S{1,9}\]发布于 2012-07-06 23:46:42
对不起,向后看模式通常对子模式有限制。请参见f.x。Why doesn't finite repetition in lookbehind work in some flavors?p。或者在网络上搜索“后视模式限制”。
你可以试着把后视模式的所有固定长度的变体写成交替模式。但这可能有很多..。
您还可以通过正常匹配内部模式来模拟后视,并对实际目标进行匹配和分组:(?:CC|NP)*(.*)
发布于 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}
https://stackoverflow.com/questions/11365159
复制相似问题