PHP preg_split有两个分隔符,并在“after”字符串中保留分隔符

时间:2017-06-22 10:40:40

标签: php preg-split

在解析带有两个分隔符的字符串并将分隔符保留在拆分的“后”部分时,我对preg_split有点失落。我的分界符是$或#。 例如:

$str = 'participant-$id#-group';
$ar = preg_split('/([^$#?]+[$#?]+)/', $str, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);
echo "<pre>";  print_r( $ar); echo "</pre>";

将显示:

Array
(
    [0] => participant_data-$
    [1] => id#
    [2] => -group
)

但是我需要:

Array
(
    [0] => participant_data-
    [1] => $id
    [2] => #-group
)
正则表达式让我的大脑受伤。有人可以建议我如何使用PREG_SPLIT_DELIM_CAPTURE并在分段的开头保留分隔符? 谢谢!

2 个答案:

答案 0 :(得分:1)

试试这个:

$ar = preg_split('/(\$[^#]+)/', $str, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);

答案 1 :(得分:1)

这个怎么样?我正在捕捉分隔符,然后将它们重新组合在一起。

<?php

$str = 'participant-$id#-group';
$ar = preg_split('/([^$#?]+[^$#?]+)/', $str, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);
echo "<pre>";  print_r( $ar); echo "</pre>";  

/*
Array
(
    [0] => participant-
    [1] => $
    [2] => id
    [3] => #
    [4] => -group
) */

$result = array();
$result[] = $ar[0];
for($i=1;$i<count($ar);$i+=2) {
    $result[] = $ar[$i] . $ar[$i+1];
}

echo "<pre>";  print_r( $result); echo "</pre>";  

/*
Array
(
    [0] => participant-
    [1] => $id
    [2] => #-group
)
*/

?>