正则表达式引擎进行回溯。
引擎尝试与 匹配100,[10]*但这不起作用,因为然后1没有任何可匹配的内容。但随后引擎会丢弃重复的最后一个字符(仅使用[10]*for 10)并再次尝试。仍然不起作用,因为1不匹配0。引擎一次会丢弃一个角色,直到第一个角色[10*]完全丢弃。现在1匹配并且[10]*很高兴匹配其余的。
我建议阅读本教程,因为它很好地解释了幕后发生的事情。(对于您的特定问题,请查看“重复”部分)。
更多细节:
这并不取决于重复是贪婪的还是非贪婪的。正则表达式引擎将始终回溯。[10]如果你像这样让它变得不贪婪,它就会从另一端开始( 出现 0 次): [10]*?。在这种情况下,这会加快该过程,因为第一次尝试已经匹配,但它不会改变它始终匹配的事实。
事实上,您可以通过使重复“占有”来手动防止引擎回溯。如果您这样做,并且首先留下重复,那么引擎将不会尝试其他可能的重复。这将是语法:[10]*+。现在引擎将100仅与第一部分匹配。那么匹配1就会失败,但是由于您将重复设置为所有格,因此它不会回去尝试使用不同的选项[10]*。当然,在这种情况下这是无用的,但在某些用例中这种行为是可取的。所有这些都包含在链接的教程中。;)
| 归档时间: |
|
| 查看次数: |
1241 次 |
| 最近记录: |