ホームページ >バックエンド開発 >PHPチュートリアル >配列に分割する場合、難しいのは、C(x, y('z', 2, 0)) が全体であることです。

配列に分割する場合、難しいのは、C(x, y('z', 2, 0)) が全体であることです。

WBOY
WBOYオリジナル
2016-06-23 13:33:41593ブラウズ


文字列 $s='A, B, C(x, y("z", 2, 0)), D, E'
を配列に分割するのが難しいです。 ", 2, 0))、全体です。

望ましい結果:
array(
'A',
'B',
'C(x, y("z", 2, 0))',
'D',

;


ディスカッションへの返信(解決策)

$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<strlen($s); $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)

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]);

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。