配列に分割すると、問題は C(x, y('z' 2, 0)) です。これは全体です。

WBOY
リリース: 2016-06-13 12:21:00
オリジナル
1049 人が閲覧しました

配列に分割する場合、難しいのは、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';<br />$keywords = preg_split("/\,\s(?=[A-Z])/", $s);<br />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))';<br />//提取获取里面的内容<br />preg_match_all("/\(.*?\)\)/",$s,$match);//这部分正则可以自行修改<br />$s = str_replace($match[0],'%',$s);//将整体的替换成某个符合,%百分号也可以自己选定<br />$exs = explode(',',$s);<br />$i = 0;<br />foreach($exs as $key=>$value){<br />	if (strpos($value,"%") !== false) {<br />		<br />		$exs[$key] = str_replace('%',$match[0][$i],$value);<br />		$i ++;<br />	}<br />}<br />var_dump($exs);
ログイン後にコピー

複雑さの解決をお手伝いします
-----ソリューションのアイデア--------------------- -
したがって、この種のことは正規表現で処理できるものではありません。頭を悩ませて正規表現を作成するよりも、正直に関数を作成する方がコスト効率が高くなります。
$s='A, B, C(x, Y("z", 2, 0)), D, E';<br />print_r(foo($s));<br /><br />function foo($s) {<br />  $r = array();<br />  $m = 0;<br />  $t = '';<br />  for($i=0; $i<strlen($s); $i++) {<br />    if($s{$i} == '(') $m++;<br />    if($s{$i} == ')') $m--;<br />    if($m == 0 && $s{$i} == ',') {<br />      if($t) $r[] = $t;<br />      $t = '';<br />    }else $t .= $s{$i};<br />  }<br />  if($t) $r[] = $t;<br />  return $r;<br />}
ログイン後にコピー
Array<br />(<br />    [0] => A<br />    [1] =>  B<br />    [2] =>  C(x, Y("z", 2, 0))<br />    [3] =>  D<br />    [4] =>  E<br />)<br /><br />
ログイン後にコピー

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート