preg_match匹配过多字符长度的限制的思路分析
今天在编写采集程序的过程中,遇到了preg_match函数无法匹配某些页面的困扰。我反复检查正则表达式,没有发现任何明显的问题。于是,我开始怀疑是不是preg_match函数对匹配的字符串长度有所限制。
在官方文档中并没有找到相关的说明。为了验证我的猜想,我将要匹配的字串不断缩短,直到缩短到原来的五分之一时,匹配居然成功了。这使我更加坚信了我的猜想。于是,我开始在搜索引擎中寻找解决方案。
终于,在搜索中找到了答案:在phpi文件中加入一行代码(可以放在任何位置,我选择放在了最前面)——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的递归限制。如果这个参数设置了一个很大的值,可能会消耗所有进程的可用堆栈,最终导致PHP崩溃。我们可以通过修改配置来限制其值:ini_set('pcre.recursion_limit', 99999)。
在实际项目应用中,除了设置递归限制外,还应该对内存进行限定设置。通过调用ini_set('memory_limit', '64M')来确保程序的稳定运行。这样,我们的程序就能更加稳健地运行,避免不必要的错误和崩溃。
网站模板
- ai怎么设计田野风景图横幅-
- 中国的leapmotion“微动” 欲切入智能电视
- URL解析漏洞在PDF文档中的利用
- 笔记本新名词解析之什么是3G上网本
- CSS网页布局中ID与class的理解
- 医院网站SEO优化的这五年让我赚了50万
- 其实并非所有草根站长都能驯服社区门户这匹马
- 12寸全新MacBook为什么只有一个接口-合理吗-
- 唱片业谨慎接受Apple Music 渴望苹果力挽狂澜
- 机械键盘坏了一个键怎么办-按键失灵故障解决方
- 2013十大网络流行用语 2013十大最新网络语言 201
- 年度创业家之美团网王兴:长期的-贪婪者-
- 网页设计风格是不是越简单越好?
- 小米对讲机怎么样-小米米家对讲机开箱体验评测
- 淘宝客赚钱故事 大三做淘宝客月入10w
- Alienware 17值得买吗?2017新款17吋外星人笔记本全