如何绑定正则表达式组的 +/*



假设我有正则表达式:

(CC|NP)*

因此,它在 Java 中的前看正则表达式中产生了问题。我该怎么写才能避免这些问题?我想把它改写为:

(CC|NP){1,9}

在正则表达式上进行测试似乎完全忽略了上限。在Java中,这些量词{}似乎只适用于非组正则表达式元素,如下所示:

w+[S{1,9}]

抱歉,查看模式背后通常对子模式有限制。见f.x.为什么回溯中的有限重复在某些口味中不起作用?或者在 Web 上搜索"后瞻模式限制"。

您可以尝试将外观背后的图案的所有固定长度变体写为交替图案。但这可能是很多...

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

我不确定你在哪里察觉到这个问题。量词像任何实体一样作用于组。

因此,w+[S{1,9}]本可以w+[(S){1,9}]编写相同的结果。

就您在正则表达式上的示例而言,那里没有任何损坏。它符合它应该做的事情。

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

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

如果要考虑一个空格,可以像这样将其添加到分组中:
(?:(?:PUN|CC|NP)s*){1,3}

如果你只想在交替之间允许空格,可以这样完成:
(?:PUN|CC|NP)(?:s*(?:PUN|CC|NP)){0,2}

最新更新