如以下字符串
aaaafdsafdsa<bb>usetest</bb>
<div><bb>diyige</bb>321<bb>dierge</bb>cc</div>
<bb>usetest</bb>dd我想找div 之间 的<bb></bb>里的数据
也就是
<bb>diyige</bb>
bb>dierge</bb>   这样的数据
我现在是分2次做的,第一次找到div里的,<div><bb>diyige</bb>321<bb>dierge< /bb>cc</div>然后再找这里有几个<bb></bb>..
我想得知一个一次找出来的方法谢谢了!

解决方案 »

  1.   

    $string ='aaaafdsafdsa<bb>usetest</bb>
    <div><bb>diyige</bb><bb>dierge</bb>cc</div>
    <bb>usetest</bb>dd ';
    $patterns = "/<div>[^<]*(<bb>.*?<\/bb>)[^>]*<\/div>/is";
    $rs  = preg_match_all($patterns, $string, $matches);var_dump($rs);print_r($matches);
      

  2.   

    谢谢 ,不过你这的出来的是
    Array
    (
        [0] => Array
            (
                [0] => <div><bb>diyige</bb><bb>dierge</bb>cc</div>
            )    [1] => Array
            (
                [0] => <bb>diyige</bb><bb>dierge</bb>
            )
    还是要对[1] 里面的进行一次 循环才可以取出我想要的数据啊。。
      

  3.   

    这个用xpath会很方便,不过字符串前后要插入一个tag,作为xml->root标记,在这里用了<string>;$string ='<string>aaaafdsafdsa<bb>usetest</bb>
    <div><bb>diyige</bb><bb>dierge</bb>cc</div>
    <bb>usetest</bb>dd </string>';
    $dom = new DOMDocument();  
    $dom->loadXML($string);  
    $xpath = new DOMXPath($dom);  
    $element = $xpath->query("/string/div/bb");
    foreach ($element as $node) echo $node->textContent.'<br>' ;
      

  4.   

    LZ的意思是要得到array(
    "<bb>diyige</bb>",
    "bb>dierge</bb>"
    );
    我还真不知道如何在一个表达式里把这些取出来,
      

  5.   

    放弃研究了一个下午,即使用递归正则也只能做到获取前两个和最后两个<bb>,而且不是同时如果事先知道<bb>个数就能全部获取水平不足,再去修炼