Пространство удалено с помощью preg_split - PullRequest
1 голос
/ 04 апреля 2019

Я хочу разделить строку точкой, за которой следует пробел.Однако preg_split удаляет пространство из соответствующей части.

Как сохранить пространство?

preg_split('/(?<=[.])\s+/u', 'One. Two. Three.', null, PREG_SPLIT_NO_EMPTY);

// Result: ['One.', 'Two.', 'Three.']
// Expected: ['One. ', 'Two. ', 'Three.']

Ответы [ 3 ]

2 голосов
/ 04 апреля 2019

Вы можете использовать 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."
  }
}

https://3v4l.org/ZFV9t

2 голосов
/ 04 апреля 2019

Вы можете превратить позитивный взгляд в совпадение, а затем использовать \K, чтобы забыть, что было найдено. Также, чтобы соответствовать одному или нескольким пробелам, используйте \s+.

\.\s+\K

Regex demo

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."
}
0 голосов
/ 04 апреля 2019

Согласно ожидаемому результату.

$string = 'One. Two. Three.';

$split = preg_split("/(\w+\W+)/", $string, -1, PREG_SPLIT_DELIM_CAPTURE|PREG_SPLIT_NO_EMPTY);
var_dump($split);
...