使用OR禁止可变长度lookbehind的正则表达式技术

时间:2014-07-17 16:22:38

标签: java regex

我想了解正则表达式引擎如何为下面描述的技术禁止变量长度后视。这通常用于创建具有特定单词但不得包含前一个单词的模式。

例如,在这篇文章中:RegEx that matches a word that NOT succeeds another one只有当前一个20个字符中没有单词“”时,才会匹配单词cube。

因此,anubhava对此问题的回答是:

.*?small.{0,20}cube|(.*?cube)

他的评论是:

  

实际上这是绕过正则表达式引擎的简单技术   禁止可变长度后视的能力。在这个正则表达式我们   在左手上使用管道(OR)构造匹配任何我们不需要的东西   一边,最后在管道中使用一个最右边的匹配   被捕集团。

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

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

1 个答案:

答案 0 :(得分:0)

这个想法是优先选择负数与正数的匹配,所以如果负数匹配,那么它匹配,并且你没有得到第一组的正匹配。

但是,它实际上并没有以相同的方式工作;如果是这样,正则表达式引擎会使用它。

put the cube on top of the small cube
        ^ should match cube, but doesn’t, since smallcube is preferred