如何用不支持它们的语言模拟非贪婪量词?

Ips*_*gle 4 regex

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

应用此字符串:

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

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

对于像上面这样的简单案例,我已经通过这样的正则表达式解决了这个限制: <([^>]*)>

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

应用此字符串:

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

有什么办法吗?

Mar*_*ers 5

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

<([^>]*)>
Run Code Online (Sandbox Code Playgroud)

对于更多复杂情况,最终条件是多个字符,您可以尝试使用否定前瞻,但如果不支持延迟匹配,则前瞻的可能性不是:

((?!end).)*
Run Code Online (Sandbox Code Playgroud)

你最后的办法是建造一些像这样可怕的东西:

(en[^d]|e[^n]|[^e])*
Run Code Online (Sandbox Code Playgroud)