использовать preg_split, но оставить разделитель

Я читаю другие похожие посты, но в моем случае сделать это невозможно.

У меня есть следующий текст:

This. Is a test. I show. You.

Я хочу использовать preg_split используя delimiter ‘. ‘(точка + пробел), но мне нужно сохранить разделитель в возвращаемом массиве. Вот необходимый результат:

array(
'0' => 'This.',
'1' => 'Is a test.',
'2' => 'I show.',
'3' => 'You.',
);

Что я уже пробовал:

preg_split("/(\.\s/)", $text, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);

2

Решение

Используйте утверждение нулевой ширины (смотрите здесь):

$result = preg_split('~(?<=\.)\s~', $text, -1, PREG_SPLIT_NO_EMPTY);

или вы можете использовать \K функция, которая удаляет все слева от всего матча:

$result = preg_split('~\.\K\s~', $text, -1, PREG_SPLIT_NO_EMPTY);

Без регулярного выражения (если пробелами являются только пробелы, и если за последней точкой не стоит пробел):

$chunks = explode('. ', $text);
$last = array_pop($chunks);
$result = array_map(function ($i) { return $i . '.'; }, $chunks);
$result[] = $last;

или лучше:

$result = explode(' #&§', strtr($text, ['. '=>'. #&§']));
5

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

попробуй это

$matches = preg_split("/ (?=.)/", $text);
var_dump( $matches);
1

Это не решение с регулярным выражением, но другой вариант. Вероятно, это будет работать для вас тоже:

$text = "This. Is a test. I show. You.";

$result = explode('DELIM', str_replace('. ', '.DELIM', $text));
0

С помощью preg_split() и что-то еще

$text="This. Is a test. I show. You.";
$myVec=preg_split("/(\.\040)/", $text,-1,PREG_SPLIT_DELIM_CAPTURE);
$j=0;
for ($i = 0; $i < count($myVec); $i++) {
if ($myVec[$i]!=". ") {
$myNewVec[$j]=$myVec[$i];
}else{
$myNewVec[$j-1]=$myNewVec[$j-1].$myVec[$i];
}
$j++;
}
echo"<pre>";
var_dump($myNewVec);
echo "</pre>";
0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector