解决preg_match匹配过多字符长度的限制的思路分析
2023-06-13 09:14:35 时间
但是官方的文档里面没有说明这一点。
于是开始测试:将要匹配的字串不断缩短,直到缩为原来1/5的时候可以正常匹配了,所以更加确定了。
到google里一搜,终于找到了解决方案:在php.ini中加入(随便放到哪里,我是直接放第一行的)
pcre.backtrack_limit=-1
再次使用preg_match函数测试一下,大概1300多行上万个字符的字符串也能够匹配了。
项目中,用preg_match正则提取目标内容,死活有问题,代码测得死去活来。
后来发现“pcre.backtrack_limit”的值默认只设了100000。
解决办法:ini_set(‘pcre.backtrack_limit",999999999);
注:这个参数在php5.2.0版本之后可用。
另外说说关于:pcre.recursion_limit
pcre.recursion_limit是PCRE的递归限制,这个项如果设很大的值,会消耗所有进程的可用堆栈,最后导致PHP崩溃。
也可以通过修改配置来限制:ini_set(‘pcre.recursion_limit",99999);
实际项目应用中,最好也对内存进行限定设置:ini_set(‘memory_limit","64M");,这样就比较稳妥妥嘎。
于是开始测试:将要匹配的字串不断缩短,直到缩为原来1/5的时候可以正常匹配了,所以更加确定了。
到google里一搜,终于找到了解决方案:在php.ini中加入(随便放到哪里,我是直接放第一行的)
pcre.backtrack_limit=-1
再次使用preg_match函数测试一下,大概1300多行上万个字符的字符串也能够匹配了。
项目中,用preg_match正则提取目标内容,死活有问题,代码测得死去活来。
后来发现“pcre.backtrack_limit”的值默认只设了100000。
解决办法:ini_set(‘pcre.backtrack_limit",999999999);
注:这个参数在php5.2.0版本之后可用。
另外说说关于:pcre.recursion_limit
pcre.recursion_limit是PCRE的递归限制,这个项如果设很大的值,会消耗所有进程的可用堆栈,最后导致PHP崩溃。
也可以通过修改配置来限制:ini_set(‘pcre.recursion_limit",99999);
实际项目应用中,最好也对内存进行限定设置:ini_set(‘memory_limit","64M");,这样就比较稳妥妥嘎。
相关文章
- 从七个字符长度的任意命令执行到GetShell
- mysql通过INSERT IGNORE INTO插入拼音字符无效问题及解决
- python解析网页的字符编码详解编程语言
- 串MySQL数据库安全:保护你的敏感字符串(mysql敏感字符)
- Linux中创建字符设备的简易方法(linux创建字符设备)
- 串处理Oracle nvl函数:处理字符串的完美解决方案(nvloracle字符)
- 串MySQL:首次见面的欢迎(mysql第一个字符)
- Oracle字符匹配:排除不必要的错误(oracle字符不包含)
- MySQL去除指定字符简单实用的方法(mysql中去除所选字符)
- Oracle中字符函数的实用性深入分析(oracle中的字符函数)
- vbs:能算出一个字符在一字段里共出现有几次的函数
- js字符编码函数区别分析