欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

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

程序员文章站 2024-02-01 12:49:40
...
拆分为数组,难点是 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
)

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

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。

相关文章

相关视频