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

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

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

将字符串 $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", 2, 0)), D, E';$keywords = preg_split("/\,\s(?=[A-Z])/", $s);var_dump($keywords);



-----------------------------
非常感谢你的回复!但是靠?=[A-Z] 不准确,因为有可能括号内也是大写(嵌套的括号内不管什么内容是一个整体)。
$s='A, B, C(X, Y("Z", 2, 0)), D, E';

$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  
Array(    [0] => A    [1] =>  B    [2] =>  C(x, Y("z", 2, 0))    [3] =>  D    [4] =>  E)

感谢2位的回复。
想到了一个匹配括号嵌套的正则,有类似计算的可以参考一下。(没有严谨测试)

$s='A, B,C(X, Y("Ez", 2, 0, Z(kk, 99))),D, E(u(8 , D(88)))';
preg_match_all('/[A-Z](?=[,])|[^,]*\(([^()]+|(?R))*\)/',$s,$z);
print_r($z[0]);

人气教程排行