As an aside, I went to test my examples, and found that yours doesn't actually work. It needs to be [^,]+ not [^,]* otherwise it eats the input:
$str = "hello, world, hello1, world1"
echo preg_replace('/([^,]*,?)+/', '$1', $str);
# -> ""
echo preg_replace('/([^,]+,?)+/', '$1', $str);
# -> " world1"
You could capture all occurrences, by adding another set of brackets:
$str = "hello, world, hello1, world1"
echo preg_replace('/(([^,]+,?)+)/', '$1', $str);
# -> "hello, world, hello1, world1"
Or you could replace each individual occurrence, rather than the whole repeating pattern:
$str = "hello, world, hello1, world1"
echo preg_replace('/([^,]+,?)/', '$1 AND', $str);
# -> "hello, AND world, AND hello1, AND world1 AND"
If neither of those is what you want, then I suspect preg_replace is not what you want, and preg_match_all might be more appropriate.
preg_replace_callback