php 正则 最大匹配算法,解决preg_match匹配过多字符长度的限制的思路分析

本文探讨了在PHP中preg_match函数遇到的字符串长度限制问题,以及如何通过调整`pcre.backtrack_limit`配置来解除限制。文中还提醒了`pcre.recursion_limit`设置过大可能导致的内存消耗和PHP崩溃风险,并建议在项目中合理设定内存限制。此外,内容还涉及了正则表达式的应用实例和相关资源链接。
摘要由CSDN通过智能技术生成

解决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'); , 这样就比较稳妥妥嘎。

相关文章

1a1b05c64693fbf380aa1344a7812747.png

这篇文章主要介绍了最严谨的校验email地址的正则表达式及各种语言对应版,本文给出通用、Python、Javascript、PHP、Perl / Ruby、Perl等版本的最严谨的表达式写法,需要的朋友可以参考下2015-07-07

4f55910a645b073bc4fc65dc10dc14bd.png

\D元字符可以匹配非数字字符,等价于"[^0-9]"。这篇文章主要介绍了正则表达式 \D 元字符的相关资料,需要的朋友可以参考下2018-01-01

0ea3c7666119d5615e582f823fb3fad6.png

用(?>…)实现固化分组(成功匹配后,回簌时不会考虑这个匹配的字符)2012-10-10

4f96a78db829b1556ff16de21e013c7a.png

对一个文本框中输入的内容格式做出要求,格式为a/b/c这种类型数据,下面是具体的实现,大家可以学习下2014-01-01

8cc1031babc6aff2319f1c6af8544aa0.png

这篇文章主要介绍了正则表达式Matcher类中group方法,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下2019-08-08

0c932a99bb7b6f23c937db507070cc7b.png

JS正则表达式一条龙讲解,从原理和语法到JS正则、ES6正则扩展,最后再到正则实践思路2017-04-04

cca732bf65a93ed2ec0ac80c638460fe.png

这篇文章主要介绍了如何使用js正则判断非法字符限制输入,需要的朋友可以参考下2014-04-04

2d9f31f2af7b675a3d153d2b7f1035a7.png

如何仅使用JavaScript支持的正则语法,将有嵌套的内容替换2012-09-09

b452cee8ec5cd9e58ab98eba17281e59.png

这篇文章主要介绍了如何实现正则表达式的JavaScript的代码高亮方法,需要的朋友可以参考下2014-05-05

f4838ec7e2d4da28e0b57d4e852dadd4.png

今日研究discuz的代码,发现个不错的正则代码,基本上简单2008-05-05

最新评论

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值