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

(0)

相关推荐

  • 解决preg_match匹配过多字符长度的限制的思路分析

    但是官方的文档里面没有说明这一点. 于是开始测试:将要匹配的字串不断缩短,直到缩为原来1/5的时候可以正常匹配了,所以更加确定了. 到google里一搜,终于找到了解决方案:在php.ini中加入(随便放到哪里,我是直接放第一行的) pcre.backtrack_limit=-1 再次使用preg_match函数测试一下,大概1300多行上万个字符的字符串也能够匹配了. 项目中,用preg_match正则提取目标内容,死活有问题,代码测得死去活来. 后来发现"pcre.backtrack_lim

  • 快速解决C# android base-64 字符数组的无效长度问题

    解决方法: 在android向C# 后台发送图片的时候,把图片转成字符串发送的时候出现 base-64 字符数组的无效长度 错误应该在传递参数前,使用Replace("+", "%2B"),后台接收后用Replace("%2B", "+"),这样一替换,问题就解决了 以上这篇快速解决C# android base-64 字符数组的无效长度问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们.

  • 解决MyBatis中模糊搜索使用like匹配带%字符时失效问题

    目录 1.问题背景 2.解决方法 2.1.在入参SearchVo上进行特殊符号relpace转换 2.2.使用ESCAPE 2.3.总结 1.问题背景 Mybatis是我们日常项目中经常使用的框架,在项目中我们一般会使用like查询作为模糊匹配字符进行搜索匹配,下面的Mapper.xml是我们使用like在项目中进行模糊匹配的常用方式: <sql id="searchCondition"> <trim prefix="where" prefixOv

  • 正则表达式教程之匹配一组字符详解

    本文实例讲述了正则表达式教程之匹配一组字符的方法.分享给大家供大家参考,具体如下: 注:在所有例子中正则表达式匹配结果包含在源文本中的[和]之间,有的例子会使用Java来实现,如果是java本身正则表达式的用法,会在相应的地方说明.所有java例子都在JDK1.6.0_13下测试通过. 一.匹配多个字符中的某一个 在上一篇<正则表达式教程之匹配单个字符详解>中的一个匹配以na或sa开头的文本文件例子中,使用的正则表达式是.a.\.txt.如果还有一个文件是cal.txt,那么也将会被匹配到.如

  • 收集一些常用的正则表达式(匹配中文字符、匹配双字节字符、匹配HTML标记、匹配空行 and so on~~~)

    正则表达式用于字符串处理,表单验证等场合,实用高效,但用到时总是不太把握,以致往往要上网查一番.我将一些常用的表达式收藏在这里,作备忘之用.本贴随时会更新,请持续关注本站. 匹配中文字符的正则表达式: [\u4e00-\u9fa5] 匹配双字节字符(包括汉字在内):[^\x00-\xff] 应用:计算字符串的长度(一个双字节字符长度计2,ASCII字符计1) String.prototype.len=function(){return this.replace([^\x00-\xff]/g,"a

  • element vue validate验证名称重复 输入框与后台重复验证 特殊字符 字符长度 及注意事项小结【实例代码】

    具体代码如下所示: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css&quo

  • 匹配任意字符的正则表达式写法

    实现代码如下,起初测试正常(后来遇到问题),先来看最初的代码 复制代码 代码如下: var docs = document.body.innerHTML; var links =docs.match(/ed2k.*\|\//gi);//注意这里 使用了点(.)符号匹配任意字符 document.body.innerHTML = ""; for( var link in links){<BR> document.body.innerHTML += links[link]+&q

  • 正则表达式教程之匹配单个字符详解

    本文实例讲述了正则表达式教程之匹配单个字符.分享给大家供大家参考,具体如下: 注:在所有例子中正则表达式匹配结果包含在源文本中的[和]之间,有的例子会使用Java来实现,如果是java本身正则表达式的用法,会在相应的地方说明.所有java例子都在JDK1.6.0_13下测试通过. java测试代码: /** * 根据正则表达式和要匹配的源文本,输出匹配结果 * @param regex 正则表达式 * @param sourceText 要匹配的源文本 */ public static void

  • iOS中如何判断中英文混合的字符长度

    废话不多说,直接给大家贴代码了. 一,代码. - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. //第一种方法 NSLog(@"--first-%i",[self convertToInt:@"123我爱你"]); //第二种方法 NSLog(@"--second--%ld",[self getToInt:@&

  • C++中可正确获取UTF-8字符长度的函数分享

    在C++的char*以及string中,使用的是字节流编码,即sizeof(char) == 1. 也就是说,C++是不区分字符的编码的. 而一个合法UTF8的字符长度可能为1-4位. 现在假设一串输入为UTF8编码,如何能准确的定位到每个UTF8字符的"CharPoint",而不会错误的分割字符呢? 参考这个页面:http://www.nubaria.com/en/blog/?p=289 可以改造出下面的函数: const unsigned char kFirstBitMask =

随机推荐