разделитель preg с двумя разделителями в PHP


Как объединить два разделителя в preg_split? Например:

$str = "this is a test , and more";
$array = preg_split('/( |,)/', $str, -1, PREG_SPLIT_DELIM_CAPTURE);
print_r($array);

Создаст массив в виде

Array
(
    [0] => this
    [1] =>  
    [2] => is
    [3] =>  
    [4] => a
    [5] =>  
    [6] => test
    [7] =>  
    [8] => 
    [9] => ,
    [10] => 
    [11] =>  
    [12] => and
    [13] =>  
    [14] => more
)

Но я хочу получить

Array
(
    [0] => this
    [1] =>  
    [2] => is
    [3] =>  
    [4] => a
    [5] =>  
    [6] => test
    [7] => ,
    [8] => and
    [9] =>  
    [10] => more
)

На самом деле, я хочу объединить элементы массива, когда два разделителя являются соседними. Другими словами, игнорирование первого разделителя, если следующая часть является вторым разделителем.

Author: Googlebot, 2012-12-19

3 answers

Попробуйте использовать класс символов: /[ ,]+/

+ является квантором, означающим "1 или более"

 3
Author: Niet the Dark Absol, 2012-12-19 00:45:46

Как насчет того, чтобы убедиться, что ситуация не произойдет в первую очередь:

<?php
    $str = "this is a test , and more";
    $str=preg_replace('/ *, */',',',$str);
    $array = preg_split('/( |,)/', $str, -1, PREG_SPLIT_DELIM_CAPTURE);
    print_r($array);
?>

Array
(
    [0] => this
    [1] =>  
    [2] => is
    [3] =>  
    [4] => a
    [5] =>  
    [6] => test
    [7] => ,
    [8] => and
    [9] =>  
    [10] => more
)
 2
Author: Josay, 2012-12-19 00:53:52

С помощью /([, ]+)/ это работает. Видишь кодовый контроллер

 1
Author: Shiplu Mokaddim, 2012-12-19 01:08:04