当前位置:Gxlcms > PHP教程 > 请教正则必须包含如何匹配呢

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

时间:2021-07-01 10:21:17 帮助过:6人阅读

正则:
(.*)

内容:
  • str
  • 标题一
  • 标题二

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


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


    回复讨论(解决方案)

    加上 U,禁止贪婪

    是这个意思吗

    $str = '
  • str
  • 标题一
  • 标题二';preg_match_all("/(.*)<\/b><\/div><\/a>/is",$str,$match);echo "
    ";print_r($match);

    是这个意思吗

    $str = '
  • str
  • 标题一
  • 标题二';preg_match_all("/(.*)<\/b><\/div><\/a>/is",$str,$match);echo "
    ";print_r($match);



    正确结果:
    标题二

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

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

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

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

    该死的csdn
    preg_match_all("/(.*)<\/b><\/div><\/a>/is U",$str,$match);

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

    加了U

    $str = '
  • str
  • 标题一
  • 标题二';preg_match_all("/(.*)<\/b><\/div><\/a>/U",$str,$match);echo "
    ";print_r($match);


    结果:
    Array(    [0] => Array        (            [0] => 标题一标题二        )    [1] => Array        (            [0] => 标题二        ))


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

    该死的csdn
    preg_match_all("/(.*)<\/b><\/div><\/a>/is U",$str,$match);



    结果:
    Array(    [0] => Array        (            [0] => 标题一标题二        )    [1] => Array        (            [0] => 标题二        ))


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

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

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

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

    $s =<<< TXT
  • str
  • 标题一
  • 标题二TXT;preg_match('/.+()/is', $s, $m);echo $m[1];
    标题二

    再简化一下

    preg_match('/.+()/is', $s, $m);echo $m[1];/*标题二*/

    人气教程排行