2012-12-19 25 views
5

如何合并preg_split中的两个分隔符?例如:preg_split在PHP中有两个分隔符

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

其实,我想在两个分隔符是邻居合并数组元素。换句话说,如果下一个部分是第二个分隔符,则忽略第一个分隔符。

+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

相关问题