微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

正则表达式 – 如何用不支持它们的语言模拟非贪婪量词?

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

应用此字符串:

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

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

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

但是像这样的正则表达式可以做些什么呢?开始(.*)结束

应用此字符串:

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

有什么办法吗?

解决方法

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

<([^>]*)>

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

((?!end).)*

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐