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

正则表达式含糊不清

关于正则表达式力学的基本问题:

我有以下表达式:[10] * 1 [10] *.

这匹配100吗?

我的推理:
一个选项:[10] *匹配“100”,然后到达字符串的末尾=>不配.
第二个选项:忽略[10] *并且表达式匹配.

我忘记了一些微不足道的事情,或者这实际上取决于正则表达式引擎?
(我记得有关贪婪与贪婪的事情,但我不确定这是否适用于这种情况)

解决方法

正则表达式引擎做回溯.

引擎试图将[100]与[10] *匹配,但这不起作用,因为那时1没有什么可匹配的.但随后引擎会丢弃重复的最后一个字符(仅使用[10] *表示10)并再次尝试.仍然不起作用,因为1不匹配0.引擎将一次丢弃一个字符,直到第一个[10 *]完全丢弃.现在1场比赛和[10] *很乐意与其他比赛相匹配.

我建议阅读this tutorial,因为它很好地解释了幕后发生了什么. (对于您的特殊问题,请查看重复部分).

更多细节:

这不取决于重复是贪婪还是不合理.正则表达式引擎将始终回溯.它只会从另一端开始(0次出现[10]),如果你不这样做的话:[10] *?在这种情况下,这将加快过程,因为第一次尝试已经匹配,但它不会改变事实,它总是匹配.

实际上,您可以通过重复“占有”来手动阻止引擎回溯.如果你这样做,并且首先重复,那么引擎将不会尝试其他可能的重复.这将是语法:[10] *.现在,引擎仅与第一部分匹配100.然后匹配1将失败,但由于你重复占有,它不会回去尝试使用[10] *的不同选项.当然,在这种情况下,这是无用的,但是存在需要这种行为的用例.所有这些也包含在链接教程中.

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

相关推荐