Вы можете избежать двойной обработки строки, используя метасимвол \G
для продолжения сопоставления неограниченного числа разделенных пробелами строк внутри одинарных кавычек.
Код: ( PHP Demo ) ( Regex Demo )
$string = "text 'for an example of the \"continue\" metacharacter' text";
var_export(preg_match_all("~(?|'|\G(?!^) )\K[^ ']+~", $string, $out) ? $out[0] : []);
Вывод:
array (
0 => 'for',
1 => 'an',
2 => 'example',
3 => 'of',
4 => 'the',
5 => '"continue"',
6 => 'metacharacter',
)