Это должно работать:
$str="hello this is a space";
preg_match('~^(.*)\s+([^\s]+)$~', $str, $matches);
$result = array($matches[1], $matches[2]);
Вы можете сделать это без регулярного выражения:
$parts = array_map('trim', explode(' ', $str));
$result = array(
implode(' ', array_slice($parts, 0, -1)),
end($parts)
);
или
$lastSpace = strrpos($str, ' ');
$str1 = trim(substr($str, 0, $lastSpace));
$str2 = trim(substr($str, $lastSpace));
$result = array( $str1, $str2 );