请教正则必须包含如何匹配呢

php中文网
发布: 2016-06-23 14:27:16
原创
863人浏览过

正则:



内容:

  • str
  • 标题一
  • 标题二


    目标:(必须包含
    )
    标题二



    当前错误结果:(匹配成了整段了)
    标题一
    标题二

    回复讨论(解决方案)

    加上 U,禁止贪婪

    是这个意思吗

    $str = '<li>str</li><li><a href="/x.html">标题一</a></li><a href="/BAMC"><div class="plst"><b>标题二</b></div></a>';preg_match_all("/<a.*?><div class=\"plst\"><b>(.*)<\/b><\/div><\/a>/is",$str,$match);echo "<pre class="brush:php;toolbar:false;">";print_r($match);
    登录后复制

    是这个意思吗

    $str = '<li>str</li><li><a href="/x.html">标题一</a></li><a href="/BAMC"><div class="plst"><b>标题二</b></div></a>';preg_match_all("/<a.*?><div class=\"plst\"><b>(.*)<\/b><\/div><\/a>/is",$str,$match);echo "<pre class="brush:php;toolbar:false;">";print_r($match);
    登录后复制



    正确结果:
    标题二


    当前错误结果:
    标题一
    标题二


    我试了你这个,还是匹配了下面这种结果。

    preg_match_all("/<a.*?><div class=\"plst\"><b>(.*)<\/b><\/div><\/a>/isU",$str,$match);//加上U,禁止贪婪模式
    登录后复制

    preg_match_all("/<a.*?><div class=\"plst\"><b>(.*)<\/b><\/div><\/a>/isU",$str,$match);//加上U,禁止贪婪模式
    登录后复制

    该死的csdn
    preg_match_all("/
    (.*)/is U",$str,$match);

    加上 U,禁止贪婪
    好象不是贪婪的问题,因为他在匹配到结果就立即结束了。

    加了U

    $str = '<li>str</li><li><a href="/x.html">标题一</a></li><a href="/BAMC"><div class="plst"><b>标题二</b></div></a>';preg_match_all("/<a.*?><div class=\"plst\"><b>(.*)<\/b><\/div><\/a>/U",$str,$match);echo "<pre class="brush:php;toolbar:false;">";print_r($match);
    登录后复制


    结果:
    <pre class="brush:php;toolbar:false;">Array(    [0] => Array        (            [0] => <a href="/x.html">标题一</a></li><a href="/BAMC"><div class="plst"><b>标题二</b></div></a>        )    [1] => Array        (            [0] => 标题二        ))
    登录后复制


    preg_match_all("/<a.*?><div class=\"plst\"><b>(.*)<\/b><\/div><\/a>/isU",$str,$match);//加上U,禁止贪婪模式
    登录后复制

    该死的csdn
    preg_match_all("/
    (.*)/is U",$str,$match);



    结果:
    Array(    [0] => Array        (            [0] => <a href="/x.html">标题一</a></li><a href="/BAMC"><div class="plst"><b>标题二</b></div></a>        )    [1] => Array        (            [0] => 标题二        ))
    登录后复制


    前面一堆这个还是多余存在的:
    标题一

    给个提醒
    匹配一些有边界的内容,应以  边界+ 排除边界+ 边界 这样的形式写正则,避免随意地用圆点
    尤其是html等标记语言,因为标记语言的特性就是标记,中间含有换行也是合法的,圆点不能涵盖,随便用圆点就有点想当然认为源字串一定工整了
    举个极端例子如:
     href="
    abc/abc.html">
    ABC

    这段html字串完全合法,一点都不影响网页的显示,但正则就要想好了

    "[^"]*"
    ]+>
    [^

    $s =<<< TXT<li>str</li><li><a href="/x.html">标题一</a></li><a href="/BAMC"><div class="plst"><b>标题二</b></div></a>TXT;preg_match('/.+(<a.+?<div class="plst".+?a>)/is', $s, $m);echo $m[1];
    登录后复制
    <a href="/BAMC"><div class="plst"><b>标题二</b></div></a>
    登录后复制

    再简化一下

    preg_match('/.+()/is', $s, $m);echo $m[1];/*<a href="/BAMC"><div class="plst"><b>标题二</b></div></a>*/
    登录后复制

    最佳 Windows 性能的顶级免费优化软件
    最佳 Windows 性能的顶级免费优化软件

    每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

    下载
    来源:php中文网
    本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
    最新问题
    开源免费商场系统广告
    热门教程
    更多>
    最新下载
    更多>
    网站特效
    网站源码
    网站素材
    前端模板
    关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
    php中文网:公益在线php培训,帮助PHP学习者快速成长!
    关注服务号 技术交流群
    PHP中文网订阅号
    每天精选资源文章推送
    PHP中文网APP
    随时随地碎片化学习

    Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号