什么是正则表达式的贪婪,什么不是贪婪或者什么是匹配优先级量词,什么是优先级量词
我不知道这个概念是什么。让我们举个例子。
一个同学想过滤他们之间的内容。这就是编写正则
程序的
方法。
$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的正则表达式,它是贪婪的,不贪婪和回溯分析。希望能对你有所帮助。如果你有任何问题,请给我留言,萧边会及时给您回复。谢谢您
支持网站。