2012-12-19 10 views
5

preg_splitに2つのデリミタをマージするにはどうすればよいですか?たとえば:preg_splitにPHPで2つのデリミタがある

$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 
) 

を取得したい、私は2つの区切り文字が隣接しているとき、配列の要素をマージしたいです。つまり、次の部分が2番目の区切り文字であれば、最初の区切り文字を無視します。

+0

あなたの最後の段落は、正規表現ではできないものです。これにカスタムコードが必要です。 –

答えて

3

は、文字クラスを使用してみてください:/[ ,]+/

+は何最初の場所で事態が起こらないことを確認することについて、「1以上」

+1

'preg_split'の' CAPTURE'機能は、括弧内の区切り文字に対してのみ機能します。 '[]'では、デリミタを捕捉できません。 – Googlebot

+1

ブラケットの周りに括弧を入れてもらえますか? –

+0

私の悪い!はい、それは単に括弧の中に置くことができます、私は代わりとしてブラケットを見ました。 – Googlebot

2

を意味数量詞です:

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

非常にトリッキーな解決策で、うまくいくはずです! – Googlebot

1

/([, ]+)/を使用すると機能します。 codepad

関連する問題