Использование Preg_Split с несколькими пробелами

У меня немного проблемы с тем, чтобы понять это.

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

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

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

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

Спасибо


person sysdomatic    schedule 01.11.2011    source источник
comment
Лучше задать этот вопрос, сказав, что вы хотели бы найти каждое вхождение двух пробелов или более.   -  person Andre    schedule 01.11.2011


Ответы (5)


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

person Yamiko    schedule 01.11.2011
comment
Да, я действительно думаю, что он имел в виду один пробел, а не пробел. Кстати, это должно быть \s\s+, если вы хотите использовать это решение. - person deviousdodo; 01.11.2011

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

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

person Bandana Sahu    schedule 02.04.2018

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

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



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

PREG_SPLIT_NO_EMPTY|PREG_SPLIT_DELIM_CAPTURE

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

Есть и другие (http://php.net/preg-split) один который фиксирует смещение, но немного меняет структуру вывода.
///////////////////// UPDATE //////////////////// ///
Я закончил тем, что использовал
/(\w+\W+)/
//сопоставляет слова и берет их и возвращает пробелы.

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

person JSG    schedule 08.04.2015

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

preg_split('/  +/', $data)
person deviousdodo    schedule 01.11.2011

Самый простой способ добиться этого — использовать \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"
}
person Simon R    schedule 02.04.2018