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

WBOY
Release: 2016-06-23 14:27:16
Original
764 people have browsed it

正则:



内容:

  • 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);
    Copy after login
    Copy after login

    是这个意思吗

    $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);
    Copy after login
    Copy after login



    正确结果:
    <a href="/BAMC"><div class="plst"><b>标题二</b></div></a>

    当前错误结果:
    标题一<a href="/BAMC"><div class="plst"><b>标题二</b></div></a>

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

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

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

    该死的csdn
    preg_match_all("/
    (.*)<\/b><\/div><\/a>/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);
    Copy after login


    结果:
    <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] => 标题二        ))
    Copy after login


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

    该死的csdn
    preg_match_all("/
    (.*)<\/b><\/div><\/a>/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] => 标题二        ))
    Copy after login


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

    给个提醒
    匹配一些有边界的内容,应以 边界+ 排除边界+ 边界 这样的形式写正则,避免随意地用圆点
    尤其是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];
    Copy after login
    <a href="/BAMC"><div class="plst"><b>标题二</b></div></a>
    Copy after login

    再简化一下

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

    source:php.cn
    Statement of this Website
    The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
    Popular Tutorials
    More>
    Latest Downloads
    More>
    Web Effects
    Website Source Code
    Website Materials
    Front End Template