比方说
<div id="aaa">12345<div id="bbb">abcde</div></div>
我想用正则取到第一个div里的代码,即:12345<div id="bbb">abcde</div>
用正则该怎么取呢,本人刚开始学习正则,求解,最好带有简单的解释

解决方案 »

  1.   

    $s = '<div id="aaa">12345<div id="bbb">abcde</div></div>';
    $r = '#<div[^>]*>(.*)</div>#';
    preg_match($r, $s, $a);
    echo $a[1];
      

  2.   

    建议你了解下正则的递归模式。
    $html = <<<html                
    <div id="aaa">12345<div id="bbb">abcde</div></div></div> <div id="ccc">match me?</div>
    html;$pa   = "#<div[^>]*>((?:([^<>])|(?R))*)</div>#is";preg_match_all($pa,$html,$match);echo "<pre/>";
    print_r($match);结果
    ==================================
    Array
    (
        [0] => Array
            (
                [0] => <div id="aaa">12345<div id="bbb">abcde</div></div>
                [1] => <div id="ccc">match me?</div>
            )    [1] => Array
            (
                [0] => 12345<div id="bbb">abcde</div>
                [1] => match me?
            )    [2] => Array
            (
                [0] => 5
                [1] => ?
            ))
      
      

  3.   

    三楼正解,通用一点的。<(\w*)\b[^>]*>(.*)<\/\1>
      

  4.   

    有个新问题,如何取到第一个开始的div和第一个结束的/div之间的值,比方说我想得到
    12345<div id="bbb">abcde
    虽然已经结贴了,高手方便的话再点一下