免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4689 | 回复: 8

正则表达式非贪婪模式限制多少字符? [复制链接]

论坛徽章:
0
发表于 2011-03-07 16:22 |显示全部楼层
本帖最后由 aboys 于 2011-03-07 16:46 编辑

preg_match('/<table.+?<\/table>/s', $html, $data);

在使用非贪婪模式进行匹配时,当table间有足够多的字符是匹配就会失败,使用贪婪模式亦能匹配,想请问谁知道非贪婪模式限制多少字符?(我想这应该是字符限制的问题,因为我减少一些tr就可以匹配到数据了)
  1. <?php
  2. $html1 = '<table>';
  3. $html2 = '01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234';
  4. $html3 = '</table>';

  5. for ($i = 40; $i <= 50; $i++) {
  6.     $html = $html1;
  7.     for ($j = 0; $j <= $i; $j++) {
  8.         $html.= $html2;
  9.     }
  10.     $html.= $html3;
  11.     if (preg_match('/<table.+?<\/table>/is', $html)) {
  12.         echo strlen($html) . "=>success<br>";
  13.     } else {
  14.         echo strlen($html) . "=>fail<br>";
  15.     }
  16. }
复制代码
结果:
85090=>success
87165=>success
89240=>success
91315=>success
93390=>success
95465=>success
97540=>success
99615=>success
101690=>fail
103765=>fail
105840=>fail

论坛徽章:
0
发表于 2011-03-07 16:34 |显示全部楼层
回复 1# aboys


    所谓失败是报错?报什么错?还是指的匹配的不是你所想象的?不要太主观啊

论坛徽章:
0
发表于 2011-03-07 16:38 |显示全部楼层
的确“失败”这词形容错了,程序没有报错。

是使用非贪婪模式正则匹配不到数据。

论坛徽章:
0
发表于 2011-03-07 17:35 |显示全部楼层
100012

论坛徽章:
0
发表于 2011-03-07 18:14 |显示全部楼层
有一个参数

论坛徽章:
0
发表于 2011-03-07 21:18 |显示全部楼层
不懂正则

论坛徽章:
0
发表于 2011-03-08 10:16 |显示全部楼层
有一个参数
wildlily980 发表于 2011-03-07 18:14



    请赐教

论坛徽章:
0
发表于 2011-03-08 15:21 |显示全部楼层
ini_set('pcre.backtrack_limit',10000000);

论坛徽章:
0
发表于 2011-03-08 16:02 |显示全部楼层
多谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP