Мне нужно разбить следующую строку и поместить каждую новую строку в новый элемент массива.Превращение многострочной строки в многоэлементный массив с использованием регулярных выражений в PHP
this is line a.(EOL chars = '\r\n' or '\n')
(EOL chars)
this is line b.(EOL chars)
this is line c.(EOL chars)
this is the last line d.(OPTIONAL EOL chars)
(Обратите внимание, что последняя строка не может иметь каких-либо EOL символов присутствует строка также иногда содержит только 1 строку, которая по определению является последним.).
Следующие правила должны быть соблюдены:
- Пустые строки (как и вторая строка) должны быть отброшены и не помещены в массив.
- Элементы EOL не должны включаться, потому что в противном случае мои сравнения строк терпят неудачу.
Таким образом, это должно привести к следующему массиву:
[0] => "this is line a."
[1] => "this is line b."
[2] => "this is line c."
[3] => "this is the last line d."
Я попытался сделать следующее:
$matches = array();
preg_match_all('/^(.*)$/m', $str, $matches);
return $matches[1];
$ матчей [1] действительно содержит каждую новую строку, но:
- Пустые линии включены также
- Кажется, что символ «\ r» получает контрабанду в любом случае в конце строк в массиве. Я подозреваю, что это имеет какое-то отношение к диапазону регулярных выражений '.' который включает все, кроме '\ n'.
Во всяком случае, я играл с '\ R' и еще много чего, но я просто не могу найти хороший шаблон регулярного выражения, который следует за двумя правилами, изложенными выше. Любая помощь, пожалуйста?
Вы можете просто передать '$ matches' через' array_filter() '(' $ матчи = array_filter ($ матчи); '), чтобы избавиться от пустых элементов. – Tadeck
Соединив все ваши ответы ниже, я нашел preg_split ('/ \ R /', trim ($ str)); работать!!! – x74x61