2012-12-19 17 views
5

Come unire due delimitatori in preg_split? Per esempio:preg_split con due delimitatori in PHP

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

produrrà un array come

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

ma voglio ottenere

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

In realtà, voglio fondere gli elementi della matrice quando due delimitatori sono vicini. In altre parole, ignorando il primo delimitatore se la parte successiva è il secondo delimitatore.

+0

L'ultimo paragrafo è qualcosa che non può essere eseguito con regex. Hai bisogno di un codice personalizzato per questo. –

risposta

3

Provare a usare una classe di caratteri: /[ ,]+/

Il + è un quantificatore che significa "1 o più"

+1

La funzione 'CAPTURE' di' preg_split' funziona solo per delimitatori tra parentesi. Con '[]', non possiamo acquisire i delimitatori. – Googlebot

+1

Puoi mettere i parents intorno alle parentesi? –

+0

il mio male! sì, può essere semplicemente inserito tra parentesi, ho appena visto le parentesi come sostituti. – Googlebot

2

Che dire fare in modo che la situazione non avviene in primo luogo:

<?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 
) 
+0

soluzione molto difficile, e dovrebbe funzionare bene! – Googlebot

1

utilizzando /([, ]+)/ funziona. Vedi codepad

Problemi correlati