2012-12-19 10 views
5

preg_split'da iki sınırlayıcı nasıl birleştirilir? Örneğin:PHP'de iki sınırlayıcılı 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 
) 

olarak bir dizi üretecek ama Aslında

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

almak istiyorum, ben iki sınırlayıcı komşular olduğunda dizi elemanlarını birleştirmek istiyorum. Başka bir deyişle, bir sonraki kısım ikinci sınırlayıcı ise ilk sınırlayıcıyı göz ardı etmek.

+0

Son paragrafınız regex ile yapılamayacak bir şeydir. Bunun için özel kod gerekiyor. –

cevap

3

bir karakter sınıfını kullanmayı deneyin: /[ ,]+/

+

+1

'prep_split''in' CAPTURE' özelliği yalnızca parantez içindeki sınırlayıcılar için çalışır. [] Ile sınırlayıcıları yakalayamayız. – Googlebot

+1

Parantezleri parantezlerin etrafına koyar mısın? –

+0

Benim hatam! evet, sadece parantez içine yerleştirilebilir, sadece parantezleri değiştirmeler olarak gördüm. – Googlebot

2

"1 veya daha fazla" anlamına gelen bir nicelik nedir durum ilk etapta olmaz emin olmaktır:

<?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

çok zor bir çözüm ve iyi çalışmalı! – Googlebot

1

/([, ]+)/'u kullanarak çalışır. Bkz. codepad