cadena a la matriz, dividida por comillas simples y dobles

Estoy tratando de usar PHP para dividir una cadena en componentes de matriz usando cualquiera" o' como el delimitador. Sólo quiero dividir por la cadena más externa. Aquí hay cuatro ejemplos y el resultado deseado para cada uno:

$pattern = "?????";
$str = "the cat 'sat on' the mat";
$res = preg_split($pattern, $str);
print_r($res);
/*output:
Array
(
    [0] => the cat 
    [1] => 'sat on'
    [2] =>  the mat
)*/

$str = "the cat \"sat on\" the mat";
$res = preg_split($pattern, $str);
print_r($res);
/*output:
Array
(
    [0] => the cat 
    [1] => "sat on"
    [2] =>  the mat
)*/

$str = "the \"cat 'sat' on\" the mat";
$res = preg_split($pattern, $str);
print_r($res);
/*output:
Array
(
    [0] => the
    [1] => "cat 'sat' on"
    [2] =>  the mat
)*/

$str = "the 'cat \"sat\" on' the mat 'when \"it\" was' seventeen";
$res = preg_split($pattern, $str);
print_r($res);
/*output:
Array
(
    [0] => the
    [1] => 'cat "sat" on'
    [2] =>  the mat
    [3] => 'when "it" was'
    [4] =>  seventeen
)*/

Como puede ver, solo quiero dividir por la cita más externa, y quiero ignorar cualquier cita dentro de las citas.

lo más cerca que he encontrado para$pattern es

$pattern = "/((?P<quot>['\"])[^(?P=quot)]*?(?P=quot))/";

Pero obviamente esto no está funcionando.

Respuestas a la pregunta(4)

Su respuesta a la pregunta