我想了解正则表达式引擎如何为下面描述的技术禁止变量长度后视。这通常用于创建具有特定单词但不得包含前一个单词的模式。
例如,在这篇文章中:RegEx that matches a word that NOT succeeds another one只有当前一个20个字符中没有单词“”时,才会匹配单词cube。
因此,anubhava对此问题的回答是:
.*?small.{0,20}cube|(.*?cube)
他的评论是:
实际上这是绕过正则表达式引擎的简单技术 禁止可变长度后视的能力。在这个正则表达式我们 在左手上使用管道(OR)构造匹配任何我们不需要的东西 一边,最后在管道中使用一个最右边的匹配 被捕集团。
我认为这种技术非常有用,但不知道如何使用它。我想了解正则表达式引擎如何创建这种正则表达式。任何人都可以帮我解释一下吗?
顺便说一句,不知道这个技术是否适用于所有的正则表达式引擎,所以我用java标记了这个问题,因为我将主要使用它。答案 0 :(得分:0)
这个想法是优先选择负数与正数的匹配,所以如果负数匹配,那么它匹配,并且你没有得到第一组的正匹配。
但是,它实际上并没有以相同的方式工作;如果是这样,正则表达式引擎会使用它。put the cube on top of the small cube
^ should match cube, but doesn’t, since smallcube is preferred