正则表达式的引擎分析
-
正则表达式的引擎有两个特点:
1.默认情况下都是贪婪匹配。
2.引擎总是着急的,会返回最先匹配到结果 -
正则引擎的工作原理举例:
当把cat应用到“He captured a catfish for his cat”,引擎先比较c和“H”,结果失败了。于是引擎再比较c和“e”,也失败了。直到第四个字符,c匹配了“c”。a匹配了第五个字符。到第六个字符t没能匹配“p”,也失败了。引擎再继续从第五个字符重新检查匹配性。直到第十五个字符开始,cat匹配上了“catfish”中的“cat”,正则表达式引擎急切的返回第一个匹配的结果,而不会再继续查找是否有其他更好的匹配。
回溯机制
-
回溯原理的简单解释
前面的引擎分析,只是针对简单的正则匹配分析,但是我们都知道正则表达式中还有很多模糊的条件匹配。这时候引擎该如何处理呢?对于计算机而言,处理模糊匹配的最好办法就是穷举,把所有可能的结果都找一遍,别忘了引擎本身都是着急的,也就是说当他匹配到一种可能性之后就不会再匹配剩余的结果。其中这种根据可能性查找的机制就叫回溯。
举个例子:用正则表达式 <.+>匹配字符串“This is a <EM>first</EM> test”,在这里首先<.+会先匹配出 “<EM>first</EM> test”,但是当>匹配换行符的