Использование Preg_Split с несколькими пробелами - PullRequest
2 голосов
/ 01 ноября 2011

У меня возникли проблемы с выяснением этого.

У меня есть такие строки данных:

$ data = "Alpha Natural Resources Inc COM COM 02076X102 2 077 45,700 x

Я стремлюсь "взорвать" эту строку там, где есть несколько пробелов. Проблема, с которой я столкнулся, состоит в том, что я нашел только решения, которые взрывают линию, где есть один пробел или более - я ищу взорвать эту линию, где есть более одного пробела, но не только один пробел (так например, что Alpha Natural Resources Inc остается вместе).

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

Спасибо

Ответы [ 5 ]

7 голосов
/ 01 ноября 2011

preg_split('/\s\s+/', $data) это соответствует кратному любому пробелу, такому как return, tab и т. Д. preg_split('/ +/', $data) будет соответствовать только пробелу от пробела.\ s выбирает любые пробелы. Удалить несколько пробелов

4 голосов
/ 02 апреля 2018

Это также будет работать для разделения данных на несколько пробелов, один пробел, а также путем нажатия на новую вкладку.

preg_split('/\s+/', $data)

1 голос
/ 08 апреля 2015

Это старый пост, но я полагаю, я добавлю для полноты.

$arr = preg_split('/[\s][\s]{1,3}/', $string,-1,PREG_SPLIT_NO_EMPTY|PREG_SPLIT_DELIM_CAPTURE);



Это намного больше возможностей для работы. Помните, что в скобках вы указываете точное количество пробелов для поиска ...
/ [\ С] [\ s] {1,4} /
или просто один или несколько раз после первого матча / [\ С] [\ s] + / Также знайте, что для этого есть флаги, которые облегчают обработку вывода.

PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE

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

Есть и другие (http://php.net/preg-split), которые фиксируют смещение, но немного изменяют структуру вывода.
//////////////////// ОБНОВЛЕНИЕ ////////////////
Я закончил с тем, чтобы использовать
/ (\ W + \ W +) /
// сопоставляет слова и возвращает его и пробелы для возврата.

По какой-то причине preg_split не заменит пробелы.
Мне это незнакомо, потому что в определенный момент это сработало, а после некоторых правок - нет. Вернулся к тому, когда это сработало, и это сработало на моей тестовой странице и моей живой. Начали вносить исправления в него: устранение неполадок и бац, а также не возвращать пробелы в результатах. Так что у меня получилось просто и здорово

0 голосов
/ 02 апреля 2018

Самый простой способ добиться этого - использовать \s, который обозначает пробел.Чтобы заставить его работать только при наличии как минимум двух (\s\s), лучше всего использовать фигурную скобку, чтобы сказать 2 или более.Не указав второй аргумент в фигурных скобках, вы говорите, что больше или равно 2.

preg_split('/\s{2,}/', $data);

Чтобы проверить этот код, попробуйте следующие

$data = 'hello  here  is  a  test! Hello World';

$p = preg_split('/\s{2,}/', $data);

die(var_dump($p));

Какие выходные данныеследующим образом:

array(5) {
  [0]=>
  string(5) "hello"
  [1]=>
  string(4) "here"
  [2]=>
  string(2) "is"
  [3]=>
  string(1) "a"
  [4]=>
  string(17) "test! Hello World"
}
0 голосов
/ 01 ноября 2011

Это должно работать:

preg_split('/  +/', $data)
...