Php 通过preg_split删除的空间
我想用点和空格分开字符串。但是,Php 通过preg_split删除的空间,php,regex,preg-split,Php,Regex,Preg Split,我想用点和空格分开字符串。但是,preg_split会从匹配零件中删除空间 我怎样才能保留空间 preg_split('/(?<=[.])\s+/u', 'One. Two. Three.', null, PREG_SPLIT_NO_EMPTY); // Result: ['One.', 'Two.', 'Three.'] // Expected: ['One. ', 'Two. ', 'Three.'] preg_split('/(?您可以将正向前瞻转换为匹配,然后使用\K忘记匹配的
preg_split
会从匹配零件中删除空间
我怎样才能保留空间
preg_split('/(?<=[.])\s+/u', 'One. Two. Three.', null, PREG_SPLIT_NO_EMPTY);
// Result: ['One.', 'Two.', 'Three.']
// Expected: ['One. ', 'Two. ', 'Three.']
preg_split('/(?您可以将正向前瞻转换为匹配,然后使用\K
忘记匹配的内容。此外,要匹配一个或多个空格,请使用\s+
\.\s+\K
结果
array(3) {
[0]=>
string(5) "One. "
[1]=>
string(5) "Two. "
[2]=>
string(6) "Three."
}
您可以将正向前瞻转换为匹配,然后使用\K
忘记匹配的内容。此外,要匹配一个或多个空白,请使用\s+
\.\s+\K
结果
array(3) {
[0]=>
string(5) "One. "
[1]=>
string(5) "Two. "
[2]=>
string(6) "Three."
}
您可以使用preg_match_all和匹配任何内容,然后使用点和可选空格
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."
}
}
您可以使用preg\u match\u all和匹配任何内容,然后使用点和可选空格
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);
按照你的预期结果
$string = 'One. Two. Three.';
$split = preg_split("/(\w+\W+)/", $string, -1, PREG_SPLIT_DELIM_CAPTURE|PREG_SPLIT_NO_EMPTY);
var_dump($split);
您可以使用explode函数print_r(explode(“”,$string));@RakeshJakhar也会删除空格,对吗?@kerbholz-不,因为它不在初始字符串中。我不明白为什么preg_拆分会删除空格,但保留点。@RakeshJakhar-“我如何保留空格?”-explode()
将删除它并产生与OP当前代码相同的结果。您可以使用分解函数print_r(explode(“”,$string));@RakeshJakhar也会删除空格,对吗?@kerbholz-不,因为它不在初始字符串中。我不明白为什么preg_分割会删除空格,但保留点。@RakeshJakhar-“如何保留空间?”-explode()
将删除它并产生与OP当前代码相同的结果。我本来打算使用此解决方案,但OP在评论中说可以有多个空格,如果有,他希望捕获所有空格。@Nick同意,我已经删除了第一个选项,转而使用\K
我打算使用此解决方案但是OP在评论中说可以有多个空格,如果有的话,他想把它们都占下来。@Nick同意,我已经删除了第一个选项,转而使用\K
如果你使用[^],正则表达式可能会更有效*
而不是*?
@尼克可能是这样。我在3v4l上试用过,实际上速度较慢。但这不是全部事实。Regex101建议*?
使用30个步骤,[^。]*
。总之,就是挑剔。这是解决OPs问题的最好方法。@Bacchus\s*
需要在regext中更改为\s+
。如果使用[^],regex可能会更有效*
而不是*?
@尼克可能是这样。我在3v4l上试用过,实际上速度较慢。但这不是全部事实。Regex101建议*?
使用30个步骤,[^。]*
。无论如何,只是挑剔而已。这是解决OPs问题的最佳方法。@Bacchus\s*
需要在regext中更改为\s+
。此答案缺少教育性解释。此答案缺少教育性解释。