免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4755 | 回复: 8
打印 上一主题 下一主题

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

论坛徽章:
0
跳转到指定楼层
1 [收藏(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
2 [报告]
发表于 2011-03-07 16:34 |只看该作者
回复 1# aboys


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

论坛徽章:
0
3 [报告]
发表于 2011-03-07 16:38 |只看该作者
的确“失败”这词形容错了,程序没有报错。

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

论坛徽章:
0
4 [报告]
发表于 2011-03-07 17:35 |只看该作者
100012

论坛徽章:
0
5 [报告]
发表于 2011-03-07 18:14 |只看该作者
有一个参数

论坛徽章:
0
6 [报告]
发表于 2011-03-07 21:18 |只看该作者
不懂正则

论坛徽章:
0
7 [报告]
发表于 2011-03-08 10:16 |只看该作者
有一个参数
wildlily980 发表于 2011-03-07 18:14



    请赐教

论坛徽章:
0
8 [报告]
发表于 2011-03-08 15:21 |只看该作者
ini_set('pcre.backtrack_limit',10000000);

论坛徽章:
0
9 [报告]
发表于 2011-03-08 16:02 |只看该作者
多谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP