有字符串如下 :
<div tag="aaaaa" ><table>.......</table></div tag="aaaaa">
<div tag="aaaaa" ><a href=''></a></div tag="aaaaa">
<div tag="aaaaa" ><div ></div>.... </div tag="aaaaa">
...要把所有的 <div tag="aaaaa" > </div tag="aaaaa">及中间的代码分别找出来.
要如何写表达式?

解决方案 »

  1.   

    (?<=<div tag="aaaaa">)[\s\S]*?(?=</div tag="aaaaa">)
      

  2.   

    $s = '<div tag="aaaaa" ><table>.......</table></div tag="aaaaa">';
    preg_match("/<div[^<]+?>(.*)<\/div.*?>/i",$s,$r);
    echo $r[1];
      

  3.   

    lvlfforever, 对于 div 嵌套的情况呢, 你的方法好象不行哦.
    $s = '<div tag="aaaaa" ><div>.......</div></div tag="aaaaa">';
      

  4.   

    0009(夏天以南)谢谢你的回复,但是看起来匹配不到,
    代码如下,
    不知道pattern 中 ?<= 这三个连写是什么作用呢?
    <?
    $str = "<div tag=\"aaaaa\" ><table>.......</table></div tag=\"aaaaa\">
    <div tag=\"aaaaa\" ><a href=''></a></div tag=\"aaaaa\">
    <div tag=\"aaaaa\" ><div ></div>.... </div tag=\"aaaaa\">";$pattern = "/(?<=<div tag=\"aaaaa\">)[\s\S]*?(?=<\/div tag=\"aaaaa\">)/";$ret = preg_match_all($pattern,$str,$r);
    echo $ret."\n";
    print_r( $r)."\n";
    ?>
      

  5.   

    (<div tag="aaaaa" >[\s|\S]*?</div tag="aaaaa">)
      

  6.   

    那是你的测试代码有问题,都多了一个空格
    你试下这个?<div tag="aaaaa"><table>.......</table></div tag="aaaaa">
    <div tag="aaaaa"><a href=''></a></div tag="aaaaa">
    <div tag="aaaaa"><div ></div>.... </div tag="aaaaa">
      

  7.   

    如果那个空格是必须的。那用下面的正则(?<=<div tag="aaaaa" >)[\s\S]*?(?=</div tag="aaaaa">)
      

  8.   

    如果外层div的内容也是你所需要的,那就用
    (<div tag="aaaaa">)[\s\S]*?(</div tag="aaaaa">)
      

  9.   

    //如果有嵌套,则涉及到嵌套匹配的问题,可以由下简单实现。
    $s = '<div tag="aaaaa" ><table>.......</table></div tag="aaaaa"><div tag="aaaaa" ><table>.......</table></div tag="aaaaa"><di
    v tag="aaaaa" ><table>.......</table></div tag="aaaaa">';
    while(preg_match("/<div[^<]+?>(.*?)<\/div.*?>(.*)/i",$s,$r))
    {
            echo $r[1]."\n";
            $s = $r[2];
    }
      

  10.   

    谢谢(风之石) ,有另一个问题,就是输出的结果怎么会重复啊
    <?
    $str = "<div tag=\"aaaaa\" ><table>.......</table></div tag=\"aaaaa\">
    <div tag=\"aaaaa\" ><a href=''></a></div tag=\"aaaaa\">
    <div tag=\"aaaaa\" ><div ></div>.... </div tag=\"aaaaa\">";
    $pattern = "/(<div tag=\"aaaaa\"[^>]*>[\s|\S]*?<\/div tag=\"aaaaa\">)/";
    $ret = preg_match_all($pattern,$str,$r);
    print_r( $r)."\n";
    ?>
    输出 :
    Array
    (
        [0] => Array
            (
                [0] => <div tag="aaaaa" ><table>.......</table></div tag="aaaaa">
                [1] => <div tag="aaaaa" ><a href=''></a></div tag="aaaaa">
                [2] => <div tag="aaaaa" ><div ></div>.... </div tag="aaaaa">
            )    [1] => Array
            (
                [0] => <div tag="aaaaa" ><table>.......</table></div tag="aaaaa">
                [1] => <div tag="aaaaa" ><a href=''></a></div tag="aaaaa">
                [2] => <div tag="aaaaa" ><div ></div>.... </div tag="aaaaa">
            ))
      

  11.   

    呵呵,题外,这个可能用DOM比正则更简单
      

  12.   

    <?php
    $str = "<div tag=\"aaaaa\" ><table>.......</table></div tag=\"aaaaa\">
    <div tag=\"aaaaa\" ><a href=''></a></div tag=\"aaaaa\">
    <div tag=\"aaaaa\" ><div ></div>.... </div tag=\"aaaaa\">";
    $pattern = "/<div tag=\"aaaaa\"[^>]*>(.+?)<\/div tag=\"aaaaa\">/s";
    $ret = preg_match_all($pattern,$str,$r);
    print_r($r);
    ?>