当前位置:Gxlcms > PHP教程 > 拆分为数组,难题是C(x,y("z"2,0)),是一个整体

拆分为数组,难题是C(x,y("z"2,0)),是一个整体

时间:2021-07-01 10:21:17 帮助过:4人阅读

拆分为数组,难点是 C(x, y("z", 2, 0)), 是一个整体。

将字符串 $s='A, B, C(x, y("z", 2, 0)), D, E';
拆分为数组,难点是 C(x, y("z", 2, 0)), 是一个整体。

想要的结果:
array(
'A',
'B',
'C(x, y("z", 2, 0))',
'D',
'E');
------解决思路----------------------
$s='A, B, C(x, y("z", 2, 0)), D, E';
$keywords = preg_split("/\,\s(?=[A-Z])/", $s);
var_dump($keywords);

------解决思路----------------------
$s='A, B, C(X, Y("Z", 1, 0)), D(X, Y("Z", 2, 0)), E,F(X, Y("Z", 3, 0))';
//提取获取里面的内容
preg_match_all("/\(.*?\)\)/",$s,$match);//这部分正则可以自行修改
$s = str_replace($match[0],'%',$s);//将整体的替换成某个符合,%百分号也可以自己选定
$exs = explode(',',$s);
$i = 0;
foreach($exs as $key=>$value){
if (strpos($value,"%") !== false) {

$exs[$key] = str_replace('%',$match[0][$i],$value);
$i ++;
}
}
var_dump($exs);

帮你在复杂化了
------解决思路----------------------
所以这种事情不是正则能够胜任的,老老实实写个函数比绞尽脑汁写正则实惠的多
$s='A, B, C(x, Y("z", 2, 0)), D, E';
print_r(foo($s));

function foo($s) {
$r = array();
$m = 0;
$t = '';
for($i=0; $i if($s{$i} == '(') $m++;
if($s{$i} == ')') $m--;
if($m == 0 && $s{$i} == ',') {
if($t) $r[] = $t;
$t = '';
}else $t .= $s{$i};
}
if($t) $r[] = $t;
return $r;
}
Array
(
[0] => A
[1] => B
[2] => C(x, Y("z", 2, 0))
[3] => D
[4] => E
)

人气教程排行