在解析带有两个分隔符的字符串并将分隔符保留在拆分的“后”部分时,我对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并在分段的开头保留分隔符?
谢谢!
答案 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
)
*/
?>