解决preg_match匹配过多字符长度的限制的思路分析
更新时间:2012年09月14日 23:34:21 作者:
今天在写采集程序的时候,使用到了preg_match,但是有几个页面始终采集不下来。反复看了N遍的正则,没有发现有问题。于是开始怀疑preg_match是否对匹配的字符串有长度限制
但是官方的文档里面没有说明这一点。
于是开始测试:将要匹配的字串不断缩短,直到缩为原来1/5的时候可以正常匹配了,所以更加确定了。
到google里一搜,终于找到了解决方案:在php.ini中加入(随便放到哪里,我是直接放第一行的)
pcre.backtrack_limit=-1
再次使用preg_match函数测试一下,大概1300多行上万个字符的字符串也能够匹配了。
项目中,用preg_match正则提取目标内容,死活有问题,代码测得死去活来。
后来发现“pcre.backtrack_limit ”的值默认只设了100000。
解决办法:ini_set(‘pcre.backtrack_limit', 999999999);
注:这个参数在php 5.2.0版本之后可用。
另外说说关于:pcre.recursion_limit
pcre.recursion_limit是PCRE的递归限制,这个项如果设很大的值,会消耗所有进程的可用堆栈,最后导致PHP崩溃。
也可以通过修改配置来限制:ini_set(‘pcre.recursion_limit', 99999);
实际项目应用中,最好也对内存进行限定设置:ini_set(‘memory_limit', '64M'); , 这样就比较稳妥妥嘎。
相关文章
这篇文章主要介绍了最严谨的校验email地址的正则表达式及各种语言对应版,本文给出通用、Python、Javascript、PHP、Perl / Ruby、Perl等版本的最严谨的表达式写法,需要的朋友可以参考下2015-07-07
\D元字符可以匹配非数字字符,等价于"[^0-9]"。这篇文章主要介绍了正则表达式 \D 元字符的相关资料,需要的朋友可以参考下2018-01-01
用(?>…)实现固化分组(成功匹配后,回簌时不会考虑这个匹配的字符)2012-10-10
对一个文本框中输入的内容格式做出要求,格式为a/b/c这种类型数据,下面是具体的实现,大家可以学习下2014-01-01
这篇文章主要介绍了正则表达式Matcher类中group方法,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下2019-08-08
JS正则表达式一条龙讲解,从原理和语法到JS正则、ES6正则扩展,最后再到正则实践思路2017-04-04
这篇文章主要介绍了如何使用js正则判断非法字符限制输入,需要的朋友可以参考下2014-04-04
如何仅使用JavaScript支持的正则语法,将有嵌套的内容替换2012-09-09
这篇文章主要介绍了如何实现正则表达式的JavaScript的代码高亮方法,需要的朋友可以参考下2014-05-05
今日研究discuz的代码,发现个不错的正则代码,基本上简单2008-05-05
最新评论