“调试”选项卡上的RegexBuddy显示了如何逐步执行正则表达式。但是这些步骤到底意味着什么?每个步骤背后都需要进行哪些操作?
步数基本上是更改输入中当前位置的次数,这是性能的很好指标。
“当前位置”可以在任何字符处或字符之间(包括整个输入之前和之后)。
为简化起见,正则表达式引擎通过沿输入移动当前位置并评估正则表达式在该位置是否匹配来处理输入。他们还跟踪比赛中正则表达式中的位置。
我不想把这个答案变成一个regex教程,但是... regex引擎在匹配时总是消耗尽可能多的输入。举个简单的例子,考虑到输入"12345"和正则表达式.*1.*,正则表达式引擎将首先应用.*占用所有输入离开位置在输入的结束,不匹配1,那么后面跟踪的“uncomsuming”一个字符的时间,直到它找到一个1,然后继续。您会看到这仅需要9个步骤即可处理初始值.*。
相比之下,如果正则表达式为[^1]*1.*,则正则表达式将"1"仅一步即可匹配。