贪婪的量词不支持他们的语言?

考虑这个正则表达式: <(.*)>

应用于此字符串:

<2356> <my pal ned> <!@%@>

显然,它会匹配整个字符串,因为贪婪* 。 最好的解决方案是使用一个非贪婪的量词,比如*? 。 但是,许多语言和编辑不支持这些。

对于上面的简单情况,我已经用这样的正则表达式来解决这个限制: <([^>]*)>

但是,像这样的正则表达式可以做些什么呢? start (.*) end

应用于此字符串:

start 2356 end start my pal ned end start !@%@ end

是否有任何追索权?


如果结束条件是单个字符的存在,则可以使用否定字符类:

<([^>]*)>

对于更复杂的情况,如果结束条件是多个字符,则可以尝试使用负向预测,但如果不支持懒惰匹配,则预测的机会不会是:

((?!end).)*

你最后的追求是建造这样一个可怕的东西:

(en[^d]|e[^n]|[^e])*

我替换.[^>]其中>在这种情况下是RE中的下一个字符。

链接地址: http://www.djcxy.com/p/76975.html

上一篇: greedy quantifiers in languages that don't support them?

下一篇: Is it possible to change emacs' regexp syntax?