preg_split在数组中获取分隔符

时间:2015-01-15 20:18:04

标签: php regex preg-split

是否可以使用preg_split按照找到的顺序将分隔符返回到数组中?

以此为例:

$string = "I>am+awesome";
preg_split("/>|\+/", $string);

然后得到一个像这样的输出:

Array(
    Array(
        0 => "I",
        1 => "am",
        2 => "awesome"
    ),
    Array (
        0 => ">"
        1 => "+"
    )
)

我意识到我可以进行拆分,然后遍历原始字符串并在找到它们时添加它们,但是如果有的话,我正在寻找更好的方法。

3 个答案:

答案 0 :(得分:1)

使用捕获组()PREG_SPLIT_DELIM_CAPTURE

preg_split("/(>|\+)/", $string, 0, PREG_SPLIT_DELIM_CAPTURE);

或者@hsz状态(>|\+)将是一个更好的模式。

答案 1 :(得分:1)

这是一种通过前瞻实现这一目标的方法,并且不使用PREG_SPLIT_DELIM_CAPTURE使这个正则表达式在其他平台上工作,例如Java,没有这样的标志:

print_r( preg_split('/(?<=[>|+])|(?=[>|+])/', $string ) );
Array
(
    [0] => I
    [1] => >
    [2] => am
    [3] => +
    [4] => awesome
)

答案 2 :(得分:0)

$str = "I+>amaw+e+s>om>e";
$matches =  preg_split("/(>|\+)/",$str);
$all_matches = preg_split("/(>|\+)/", $str ,null, PREG_SPLIT_DELIM_CAPTURE);
$delimeters_order = array_diff($all_matches,$matches);
var_dump($delimeters_order);

array(6) {
 [1]=>
 string(1) "+"
 [3]=>
 string(1) ">"
 [5]=>
 string(1) "+"
 [7]=>
 string(1) "+"
 [9]=>
 string(1) ">"
 [11]=>
 string(1) ">"
}