Этот вопрос очень похож на использовать preg_split вместо split, но у меня есть некоторые путаницы с регулярным выражением, которые я хотел бы прояснить.
Пытаюсь обновить некоторые существующие функции split(), чтобы вместо них использовать preg_split(), и получаю неясные результаты. Выполнение приведенного ниже кода даст мне массивы разной длины, и я не знаю, почему.
Из того, что я вижу, раскол заранее соответствует \n с возможным \r. И я думаю, что preg_split делает то же самое, но тогда почему он создает 2 разделения? Это связано с ленивым/жадным сопоставлением?
Демонстрационный код:
$test = "\r\n";
$val = split('\r?\n', $test); //literal interpretation of string
$val_new = split("\r?\n", $test); //php understanding that these are EOL chars
$val2 = preg_split('/\r?\n/', $test);
var_dump($val); // returns array(1) { [0]=> string(2) " " }
var_dump($val2); // returns array(2) { [0]=> string(0) "" [1]=> string(0) "" }
Изменить: добавлено в $val_new на основе комментариев Kolinks, потому что они помогли прояснить мое понимание проблемы, поэтому могут быть полезны и другим.