使用 preg_split 但保留分隔符[重复]

问题描述 投票:0回答:4

我阅读了其他相关帖子,但不可能让它在我的情况下工作。

我有以下文字:

This. Is a test. I show. You.

我想使用 preg_split 使用分隔符 '. '(点+空格),但我需要在返回的数组中保留分隔符。这是所需的结果:

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);
php delimiter preg-split
4个回答
6
投票

使用零宽度断言(此处为lookbehind):

$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, ['. '=>'. #&§']));

2
投票

试试这个

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

0
投票

这不是正则表达式的解决方案,而是另一种变体。也许它也适合你:

$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>";
© www.soinside.com 2019 - 2024. All rights reserved.