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