Java 使用或不允许可变长度查找的正则表达式技术

Java 使用或不允许可变长度查找的正则表达式技术,java,regex,Java,Regex,我想了解regex引擎是如何工作的,以禁止对下面描述的技术使用可变长度查找。这通常用于创建具有特定单词但不能具有前一个单词的模式 例如,在这篇文章中:我们的想法是匹配单词cube,前提是单词small在前20个字符中不存在 因此,专家对这一问题的回答是: .*?small.{0,20}cube|(.*?cube) 他的评论是: 实际上,这是一种绕过正则表达式引擎的简单技术 禁止可变长度查找的功能。在这个正则表达式中,我们 使用左手边的管道(或)构造匹配我们不需要的任何东西 侧边,最后使用 俘获

我想了解regex引擎是如何工作的,以禁止对下面描述的技术使用可变长度查找。这通常用于创建具有特定单词但不能具有前一个单词的模式

例如,在这篇文章中:我们的想法是匹配单词cube,前提是单词small在前20个字符中不存在

因此,专家对这一问题的回答是:

.*?small.{0,20}cube|(.*?cube)
他的评论是:

实际上,这是一种绕过正则表达式引擎的简单技术 禁止可变长度查找的功能。在这个正则表达式中,我们 使用左手边的管道(或)构造匹配我们不需要的任何东西 侧边,最后使用 俘获的一组

我认为这项技术非常有用,但我不知道如何使用它。我想了解正则表达式引擎是如何创建这种正则表达式的。有人能帮我解释一下吗


顺便说一句,我不知道这项技术是否适用于所有的正则表达式引擎,所以我用java标记了这个问题,因为我将主要在它上面使用它。

这个想法是喜欢负数匹配而不是正数匹配,所以如果负数匹配,那么它确实匹配,并且在第一组中你不会得到正数匹配

然而,它实际上并不是以同样的方式工作的;如果有,正则表达式引擎将使用它

将立方体放在小立方体的顶部
^应匹配多维数据集,但不匹配,因为首选smallcube

这一点在问题的顶部答案中有详细解释。事实上,我将把这个标记为一个副本,因为这里的解释是SO在这个主题上提供的最高点。谢谢链接。但你是否因此而投了反对票??