$re = '/((?:[\w\'-]+,\s+)+(?:[\w\'-]+\s){0,2}[\w\'-]+)(\s+(and|or)\s+[\w\'-]+)/i';
$str = 'I love my parents, Bon Jovi and Lada Gaga.
We invited the strippers, Hitler and Stalin.
The problem is, you can never know if the user is making a list, or just typing a bunch of words and inserting commas.
I\'m not sure whether to eat, shoot or leave!
List of words: can, can\'t and won\'t.
I will not use three-legged, blue or wooden stools.
Don\'t get this one or I\'ll be upset at you.
Put a command before this and I\'ll be sad.';
$subst = "$1,$2";
$result = preg_replace($re, $subst, $str);
echo "The result of the substitution is ".$result;
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for PHP, please visit: http://php.net/manual/en/ref.pcre.php