preg_split регулярное выражение для разделения на диапазон, но сохранение части этого диапазона в качестве суффикса строки

Работаем над текстом:

This is some text
which I am working   on.
This text has whitespace before the new line but after this word
Another line.

Я использую preg_split, чтобы разделить пробелы в Юникоде и все специальные символы, кроме новой строки, например:

preg_split("/\p{Z}|[^\S\n]/u", $data, -1, PREG_SPLIT_OFFSET_CAPTURE);

Флаг, потому что мне абсолютно необходимо сохранить позиции строк.

Я хотел бы, чтобы preg_split оставил переводы строк с их предыдущим словом. Например, новая строка может появиться в начале следующего слова или даже самостоятельно.

Ожидаемый результат при правильной работе:

This
is
some
text\n
which
I
am
working
on.\n
This
text
has
whitespace
before
the
new
line
but
after
this
word\n
Another
line.

Кто-нибудь может объяснить, как этого можно достичь?
Спасибо

0

Решение

Используйте вид сзади, чтобы соответствовать границе, которая существует после символа новой строки.

<?php
$str = <<<EOT
This is some text
which I am working   on.
This text has whitespace before the new line but after this word
Another line.
EOT;
$splits = preg_split("~(?<=\n)|\p{Z}+(?!\n)~", $str);
print_r($splits);
?>

Выход:

Array
(
[0] => This
[1] => is
[2] => some
[3] => text

[4] => which
[5] => I
[6] => am
[7] => working
[8] => on.

[9] => This
[10] => text
[11] => has
[12] => whitespace
[13] => before
[14] => the
[15] => new
[16] => line
[17] => but
[18] => after
[19] => this
[20] => word

[21] => Another
[22] => line.
)
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]