jia1(jia2(jia3(1+2)+3)+4)+jia4(5+6)/jia5(7+8)
有这样的字符串
我怎么才能将其分割为jia3(1+2)
jia2(jia3(1+2)+3)
jia1(jia2(jia3(1+2)+3)+4)
jia4(5+6)
jia5(7+8)
这样的数据呢??适合几种方法都不正确!谢谢了!

解决方案 »

  1.   

    <?php   
      $str = "jia1(jia2(jia3(1+2)+3)+4)+jia4(5+6)/jia5(7+8)";     
      $stack   =   array();   
      for($i=0;$i<strlen($str);$i++)   
      {   
      if ($str[$i] == '(')   
      {   
     $stack[$i] = '(';   
      }   
      else if($str[$i] == ')')   
      {   
      if (empty($stack))   
      return   false;   
      else   
      {   
      end($stack);   
      $last = key($stack);  
      echo substr($str,$last-4,$i-$last+5)."<br>"; 
      array_pop($stack);   
      }   
      }   
      }   
    ?> 
      

  2.   

    String temp=jia1(jia2(jia3(1+2)+3)+4)+jia4(5+6)/jia5(7+8) temp.substring(起始字符,终止字符);
    这样截取你要的字符串我也是新手 不知道这样行不行 你试下
      

  3.   

    通过preg_match,可以处理。可以查一下手册,非常清楚。
      

  4.   

    可以参考一下代码继续做下去。
    <?php
       $subject = "jia1(jia2(jia3(1+2)+3)+4)";
       $pattern = '/^(jia1\((.*)\))/';
       preg_match($pattern, $subject, $matches);
      print_r($matches);
    ?>
      

  5.   

    1楼的思路正确,用堆栈处理.
    $str = 'jia1(jia2(jia3(1+2)+3)+4)+jia4(5+6)/jia5(7+8)';function findStr($str,$patternStart,$patternEnd)
    {
    $l = strlen($str);
    $s = '';
    $p = array();
    while($i < $l)
    {
    $s .= $str[$i];
    if(preg_match($patternStart,$s,$m,PREG_OFFSET_CAPTURE))
    {
    $a[] = $m[0][1];
    }
    if($str[$i] == $patternEnd)
    {
    $k = max($a);
    $p[] = substr($str,$k,$i-$k+1);
    array_pop($a);
    }
    $i++;
    }
    return $p;
    }
    print_r(findStr($str,'/jia\d\($/i',')'));
      

  6.   

    <?PHP
    $str = 'jia1(jia2(jia3(1+2)+3)+4)+jia4(5+6)/jia5(7+8)';
    function get_max_depth($str){
    $max_depth=0;$depth_counter=0;
    for($i=0;$i<strlen($str);$i++){
    if($str[$i]==='('){
    $depth_counter++;
    }
    if($str[$i]===')'){
    $depth_counter--;
    }
    if($depth_counter>$max_depth)
    $max_depth=$depth_counter;
    }
    return $max_depth;
    }

     for($i=1;$i<=get_max_depth($str);$i++){
    $partten="/(jia\d\(){".$i."}\d(\+\d\)){".$i."}/";
    if(preg_match_all("$partten",$str,$matches)){
    foreach($matches[0] as $match_str)
    echo "$match_str<br>";
    }
    }
    ?>
      

  7.   

    $a = "jia1(jia2(jia3(1+2)+3)+4)+jia4(5+6)/jia5(7+8)"; 
    /*有这样的字符串 
    我怎么才能将其分割为 jia3(1+2) 
    jia2(jia3(1+2)+3) 
    jia1(jia2(jia3(1+2)+3)+4) 
    jia4(5+6) 
    jia5(7+8) 
    */

    $b = "/(\w*1\((\w*2\((\w*3\(1\+2\))\+3\))\+4\))\+(\w*4\(5\+6\))\/(\w*5\(7\+8\))/";
    if(preg_match($b,$a,$m)){
    for($i=1;$i<count($m);$i++){
    echo "{$m[$i]}<br>";
    }
    }新手请见谅 我自己写完了 我自己都看着晕