PHPでは、先頭に「*」を付けずに文字列を「:」文字で分割する必要があります。
これは、explode()の使用が行うことです。
$string = "1*:2:3*:4";
explode(":", $string);
output: array("1*", "2", "3*", "4")
ただし、必要な出力は次のとおりです。
output: array("1*:2", "3*:4")
どうすれば目的の出力を達成できますか?
それ自体が処理できるよりも複雑な分割を試みているので、おそらくでpreg_match_all()
はなく探しています。正規表現を使用して表現された、特定のパターンに一致する文字列のすべての部分を収集できます。あなたが探しているパターンは、次のようなものです。explode()
explode()
preg_match_all()
:の後に*:の後に:以外の何かが続く
したがって、代わりにこれを試してください。
preg_match_all('/[^:]+\*:[^:]+/', $string, $matches);
print_r($matches);
これは次のようなものを出力します:
Array
(
[0] => Array
(
[0] => 1*:2
[1] => 3*:4
)
)
配列に次元が追加されている場合でも、結果を使用するのとほぼ同じ方法で使用できるはずですexplode()
(一致を「グループ」に分割し、すべての結果が式全体または最初の(0番目の)グループ)。
$str = '1*:2:3*:4';
$res = preg_split('~(?<!\*):~',$str);
print_r($res);
出力します
Array
(
[0] => 1*:2
[1] => 3*:4
)
パターンは基本的に次のように述べています。
[アスタリスクで始まらないコロン] で分割