Мартти, воскрешая этот вопрос, потому что это было простое решение, которое позволяет выполнять замену в одном идут-нет необходимости в Implode. (Найден на ваш вопрос, делая некоторые исследования для общего вопроса о how to exclude patterns in regex.)
Вот наше простое регулярное выражение:
"[^"]*"(*SKIP)(*F)|\s+
Левая сторона чередовании соответствует полной "quoted strings"
то намеренно не удается. Правая сторона соответствует символам пробела, и мы знаем, что они являются правильными символами пробела, потому что они не соответствовали выражению слева.
Этот код показывает, как использовать регулярные выражения (см результаты в нижней части online demo):
<?php
$regex = '~"[^"]*"(*SKIP)(*F)|\s+~';
$subject = 'hola hola "pepsi cola" yay';
$replaced = preg_replace($regex,"",$subject);
echo $replaced."<br />\n";
?>
Reference
How to match (or replace) a pattern except in situations s1, s2, s3...
Может двойные кавычки экранировать кавычки, или это не-isse (например, «hola hola» pepsi «cola» yay' станет «holahola» pepsi \ «cola» yay' или «hola hola» pepsi \ «cola» yay')? – Wrikken