Space 被 preg_split 删除
Space removed by preg_split
我想用一个点和一个 space 来分割字符串。但是,preg_split
从匹配的部分中删除了 space。
如何保留 space?
preg_split('/(?<=[.])\s+/u', 'One. Two. Three.', null, PREG_SPLIT_NO_EMPTY);
// Result: ['One.', 'Two.', 'Three.']
// Expected: ['One. ', 'Two. ', 'Three.']
您可以将正先行转换为匹配,然后使用 \K
忘记匹配的内容。此外,要匹配一个或多个空格,请使用 \s+
.
\.\s+\K
var_dump(preg_split('/\.\s+\K/', 'One. Two. Three.', null, PREG_SPLIT_NO_EMPTY));
结果
array(3) {
[0]=>
string(5) "One. "
[1]=>
string(5) "Two. "
[2]=>
string(6) "Three."
}
您可以使用 preg_match_all 并匹配任何点和可选的 space
preg_match_all("/(.*?\.\s*)/", 'One. Two. Three.',$m);
结果:
array(2) {
[0]=>
array(3) {
[0]=>
string(5) "One. "
[1]=>
string(5) "Two. "
[2]=>
string(6) "Three."
}
[1]=>
array(3) {
[0]=>
string(5) "One. "
[1]=>
string(5) "Two. "
[2]=>
string(6) "Three."
}
}
按照您的预期结果。
$string = 'One. Two. Three.';
$split = preg_split("/(\w+\W+)/", $string, -1, PREG_SPLIT_DELIM_CAPTURE|PREG_SPLIT_NO_EMPTY);
var_dump($split);
我想用一个点和一个 space 来分割字符串。但是,preg_split
从匹配的部分中删除了 space。
如何保留 space?
preg_split('/(?<=[.])\s+/u', 'One. Two. Three.', null, PREG_SPLIT_NO_EMPTY);
// Result: ['One.', 'Two.', 'Three.']
// Expected: ['One. ', 'Two. ', 'Three.']
您可以将正先行转换为匹配,然后使用 \K
忘记匹配的内容。此外,要匹配一个或多个空格,请使用 \s+
.
\.\s+\K
var_dump(preg_split('/\.\s+\K/', 'One. Two. Three.', null, PREG_SPLIT_NO_EMPTY));
结果
array(3) {
[0]=>
string(5) "One. "
[1]=>
string(5) "Two. "
[2]=>
string(6) "Three."
}
您可以使用 preg_match_all 并匹配任何点和可选的 space
preg_match_all("/(.*?\.\s*)/", 'One. Two. Three.',$m);
结果:
array(2) {
[0]=>
array(3) {
[0]=>
string(5) "One. "
[1]=>
string(5) "Two. "
[2]=>
string(6) "Three."
}
[1]=>
array(3) {
[0]=>
string(5) "One. "
[1]=>
string(5) "Two. "
[2]=>
string(6) "Three."
}
}
按照您的预期结果。
$string = 'One. Two. Three.';
$split = preg_split("/(\w+\W+)/", $string, -1, PREG_SPLIT_DELIM_CAPTURE|PREG_SPLIT_NO_EMPTY);
var_dump($split);