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)
这样的数据呢??适合几种方法都不正确!谢谢了!
有这样的字符串
我怎么才能将其分割为jia3(1+2)
jia2(jia3(1+2)+3)
jia1(jia2(jia3(1+2)+3)+4)
jia4(5+6)
jia5(7+8)
这样的数据呢??适合几种方法都不正确!谢谢了!
$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);
}
}
}
?>
这样截取你要的字符串我也是新手 不知道这样行不行 你试下
<?php
$subject = "jia1(jia2(jia3(1+2)+3)+4)";
$pattern = '/^(jia1\((.*)\))/';
preg_match($pattern, $subject, $matches);
print_r($matches);
?>
$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',')'));
$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>";
}
}
?>
/*有这样的字符串
我怎么才能将其分割为 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>";
}
}新手请见谅 我自己写完了 我自己都看着晕