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+
。此答案缺少教育性解释。此答案缺少教育性解释。