PHP正则表达式效率贪婪、非贪婪和回溯分析(推荐)

PHP正则表达式效率贪婪、非贪婪和回溯分析(推荐)
什么是正则表达式的贪婪,什么不是贪婪或者什么是匹配优先级量词,什么是优先级量词

我不知道这个概念是什么。让我们举个例子。

一个同学想过滤他们之间的内容。这就是编写正则程序方法
$str = preg_replace(% %我,$str); / /非贪婪
看起来,这似乎不是一个问题,但如果
警报(文档cookie);
然后通过上面的程序,结果是
警报(文档cookie);
$str = preg_replace(% %我,$str); / /非贪婪
print_r($str);
输出是
还是没能达到他想要的效果。以上是不贪,但也被称为惯性,非贪婪的标志符号添加到数字字符的个数,如+,*,(比较特殊,我会写在以后的博客)等,它是不贪心,如果不写,这是greed.such作为
警报(文档cookie);
$str = preg_replace(% %我,$str); / /非贪婪
print_r($str);
仅输出这些脚本,这似乎不合适,哈,您知道如何重写这个规则吗
以上是贪婪,非贪婪的介绍。下面,谈谈贪婪和非贪婪引起的回溯问题。先看一个小例子。

正则表达式是 W×( D +),和字符串cfc456n,那么什么是1美元的常规赛吗

如果你回答456,然后祝贺你,答案是错的,结果不是456,而是6,你知道为什么吗

cfc4n解释,当与常规 W *规则引擎( D +)匹配字符串cfc456n,将使用 W *匹配字符串cfc456n第一,首先, W *所有的字符会匹配字符串cfc456n字符串,然后交给 D +匹配的休息,其余的都没有,在这个时候, W *会吐出规则的字符不情愿的,为 D +相匹配,同时,在吐字,记录了一个点,这个点是用于回溯,然后 D +匹配,发现不匹配,会再次要求 W *,吐出一个字符, W *将记录再次回来,吐出一个字。此时, W *匹配结果只cfc45。6n已经吐出。将再次匹配6。如果匹配成功,它将通知引擎。如果匹配成功,它将直接显示。因此,(+ +)的结果是6,而不是456。

当上述正则表达式修改为 W×( D +)(注意,这里是非贪婪),琴弦仍cfc456n,那么什么是1美元的正则匹配吗

答案是:结果是456。

嗯,是的,对,是456 cfc4n,弱弱的问,为什么是456呢

我要解释为什么是456。

规则是一个正则表达式,量词优先匹配,所以 W *将匹配字符串cfc456,因为 W *不贪婪,正则表达式 W +引擎将只使用匹配一个字符串,然后到 D +回到比赛的下一个字符的控制,同时,一个记录点匹配不成功,返回这里,再一次,即回溯点。因为 W后面的量词是**,说0到无数次,所以,第一个是0,这是 W *,空记录回溯点,到 D +控制,匹配 D + cfc456n C,然后,然后第一个字符,然后没有控制权 w *,cfc456n C, W,C,因为它是不贪婪,所以他只有一个字符,然后记录D的回溯点,控制 D,F, D、F然后再失败,然后 W *控制, W,C,记录点(当 W *是CFC,匹配结果)给控制 D +, D +匹配4,匹配成功,然后分类+ 1多次,所以,再回来,5,匹配成功,然后,再次,6,成功,然后继续匹配。做的,下一个字符是N,匹配失败,然后,◎D +会把控制权。由于没有正则表达式后 D +,整个正则表达式声明匹配完成,其结果是cfc456。第一组结果是456。亲爱的同学们,你们知道这个新话题的结果,为什么是456

那么,你从上述贪婪、非贪婪匹配原则的例子中知道吗你明白当你需要用贪婪,而不是贪婪处理你的字符串
文章谈到了哥斯达黎加的表达,程序
$ ;
$ 长度大于100014
美元($注册,preg_repalce ret =str); / /返回null
原因是回溯太多,直到堆栈空间创建

再看一个例子。

字符串
$ =;
正则表达式
strregex1美元=% + %;
strregex2美元=% + %;
($ strregex3 =:(!)%;
以上是小编介绍了PHP的正则表达式,它是贪婪的,不贪婪和回溯分析。希望能对你有所帮助。如果你有任何问题,请给我留言,萧边会及时给您回复。谢谢您支持网站
免责声明:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。
相关文章
返回顶部