Вы можете использовать шаблон SKIP FAIL, чтобы пропустить совпадающие значения от открывающей до закрывающей двойной кавычки, а затем сопоставить 1+ горизонтальных пробельных символов для разделения на
"[^"]*"(*SKIP)(*FAIL)|\h+
Regex demo
$str =
'#PROGRAM "Accounting company" 98.2
#GENERATED 2020715 "SE"';
$data = explode("\n", $str);
foreach($data as &$value){
$value = preg_split("/\"[^\"]*\"(*SKIP)(*FAIL)|\h+/", $value);
}
print_r($data);
Вывод
Array
(
[0] => #PROGRAM
[1] => "Accounting company"
[2] => 98.2
)
Array
(
[0] =>
[1] => #GENERATED
[2] => 2020715
[3] => "SE"
)
Если вам не нужна пустая запись во втором массиве, вы можете использовать флаг PREG_SPLIT_NO_EMPTY
:
$value = preg_split("/\"[^\"]*\"(*SKIP)(*FAIL)|\h+/", $value, -1, PREG_SPLIT_NO_EMPTY);
Php демонстрация