使用 preg_split 但保留分隔符
use preg_split but keep delimiter
我阅读了其他相关帖子,但无法使其适用于我的情况。
我有以下文字:
This. Is a test. I show. You.
我想使用 preg_split 使用分隔符 '. '(点 + space),但我需要在返回的数组中保留定界符。这是所需的结果:
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);
试试这个
$matches = preg_split("/ (?=.)/", $text);
var_dump( $matches);
这不是正则表达式的解决方案,而是另一种变体。可能它对你也有用:
$text = "This. Is a test. I show. You.";
$result = explode('DELIM', str_replace('. ', '.DELIM', $text));
使用零宽度断言(此处回顾):
$result = preg_split('~(?<=\.)\s~', $text, -1, PREG_SPLIT_NO_EMPTY);
或者您可以使用 \K
功能从整个匹配中删除左侧的所有内容:
$result = preg_split('~\.\K\s~', $text, -1, PREG_SPLIT_NO_EMPTY);
没有正则表达式(如果 whitespace 只是 space,并且如果最后一个点后面没有跟 space):
$chunks = explode('. ', $text);
$last = array_pop($chunks);
$result = array_map(function ($i) { return $i . '.'; }, $chunks);
$result[] = $last;
或更好:
$result = explode(' #&§', strtr($text, ['. '=>'. #&§']));
使用 preg_split()
和更多
$text="This. Is a test. I show. You.";
$myVec=preg_split("/(\.0)/", $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>";
我阅读了其他相关帖子,但无法使其适用于我的情况。
我有以下文字:
This. Is a test. I show. You.
我想使用 preg_split 使用分隔符 '. '(点 + space),但我需要在返回的数组中保留定界符。这是所需的结果:
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);
试试这个
$matches = preg_split("/ (?=.)/", $text);
var_dump( $matches);
这不是正则表达式的解决方案,而是另一种变体。可能它对你也有用:
$text = "This. Is a test. I show. You.";
$result = explode('DELIM', str_replace('. ', '.DELIM', $text));
使用零宽度断言(此处回顾):
$result = preg_split('~(?<=\.)\s~', $text, -1, PREG_SPLIT_NO_EMPTY);
或者您可以使用 \K
功能从整个匹配中删除左侧的所有内容:
$result = preg_split('~\.\K\s~', $text, -1, PREG_SPLIT_NO_EMPTY);
没有正则表达式(如果 whitespace 只是 space,并且如果最后一个点后面没有跟 space):
$chunks = explode('. ', $text);
$last = array_pop($chunks);
$result = array_map(function ($i) { return $i . '.'; }, $chunks);
$result[] = $last;
或更好:
$result = explode(' #&§', strtr($text, ['. '=>'. #&§']));
使用 preg_split()
和更多
$text="This. Is a test. I show. You.";
$myVec=preg_split("/(\.0)/", $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>";