2

PHPでは、先頭に「*」を付けずに文字列を「:」文字で分割する必要があります。

これは、explode()の使用が行うことです。

$string = "1*:2:3*:4";
explode(":", $string);
output: array("1*", "2", "3*", "4")

ただし、必要な出力は次のとおりです。

output: array("1*:2", "3*:4")

どうすれば目的の出力を達成できますか?

4

2 に答える 2

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番目の)グループ)。

于 2012-12-07T12:33:26.403 に答える
2
$str = '1*:2:3*:4';
$res = preg_split('~(?<!\*):~',$str);
print_r($res);

出力します

Array
(
    [0] => 1*:2
    [1] => 3*:4
)

パターンは基本的に次のように述べています。

[アスタリスクで始まらないコロン] で分割

于 2012-12-07T12:46:44.957 に答える