Работаем над текстом:
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.
Кто-нибудь может объяснить, как этого можно достичь?
Спасибо
Используйте вид сзади, чтобы соответствовать границе, которая существует после символа новой строки.
<?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.
)
Других решений пока нет …