1

繰り返しパターンで preg_replace を使用すると、参照は最後のものだけを返します。すべてを取得する方法はありますか?

例えば:

 $str = "hello, world, hello1, world1"
 echo(preg_replace('/([^,]*,?)+/', '$1', $str));

world1を返しますが、一致した他の部分にアクセスする方法はありますか?

これは単なる例です。参照内のすべての一致する部分にアクセスする方法があるかどうかを知りたいだけですか?

4

1 に答える 1

2

余談ですが、私の例をテストしに行ったところ、あなたの例は実際には機能しないことがわかりました。それ以外の場合は、入力を食べる必要はあり[^,]+ません:[^,]*

$str = "hello, world, hello1, world1"
echo preg_replace('/([^,]*,?)+/', '$1', $str);
# -> ""
echo preg_replace('/([^,]+,?)+/', '$1', $str);
# -> " world1"

別の括弧のセットを追加することで、すべての出現をキャプチャできます。

$str = "hello, world, hello1, world1"
echo preg_replace('/(([^,]+,?)+)/', '$1', $str);
# -> "hello, world, hello1, world1"

または、繰り返しパターン全体ではなく、個々のオカレンスを置き換えることができます。

$str = "hello, world, hello1, world1"
echo preg_replace('/([^,]+,?)/', '$1 AND', $str);
# -> "hello, AND world, AND hello1, AND world1 AND"

どちらもあなたが望むものではない場合、私はそれがあなたが望むpreg_replaceものではなく、preg_match_allより適切であると思われます.

于 2012-08-06T04:02:47.407 に答える