比如$string='sa(<d>)f(<>)klasfjl(<(<asdf>)(<asdf>)>)'实现:把"(<" ">)"中的内容提取出来.输出每个(<......>)中的内容.
嵌套"(<",">)"的和各种'(<'  '>)'的组合方式也要考虑在内.请问实现这个用什么方法比较好?

解决方案 »

  1.   

    正则,或一个字符一个字符过。
    正则比较方便点
    如果能控制String 内容,最好用XML格式
      

  2.   

    $string = "sa(<d>)f(<>)klasfjl(<(<asdf>)(<asdf>)>";
    $newstr = str_replace("(<", "(", $string);
    $newstr = str_replace(">)", ")", $newstr);$len =strlen($newstr);$stack = array();
    $pos = array();for ($i=0; $i<$len; $i++)
    {
    if ($newstr[$i] == "(")
    {
    array_push($pos, $i);
    }
    elseif ($newstr[$i] == ")")
    {
    $start_pos = array_pop($pos);
            $stack[] = trim(substr($newstr, $start_pos+1, $i-$start_pos-1));
    }
    }
    var_export($stack);
      

  3.   

    preg_match_all('/\(\s\<([^\>\(\<\)]*?)\>\)/',$string,$matches);
    var_dump($matches);不全。不理解你说的匹配组合内容什么意思。 是否是要 合并( <( <asdf>)( <asdf>)>) 内的匹配内容 成为  asdfasdf?
      

  4.   

    NO 只是提取'(<'和'>)'之间的内容.(还要考虑各种嵌套的可能)