在每次出现 3 个特定定界符之前拆分一个字符串
Split a string just before each occurrence of 3 specific delimiters
在解析具有多个定界符的字符串并将定界符保留在拆分的 'after' 部分时,我对 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
并将分隔符保留在段的开头吗?
试试这个:
$ar = preg_split('/($[^#]+)/', $str, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);
这个怎么样。我正在捕获分隔符,然后将它们放回原处。
<?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
)
*/
?>
您不需要捕获分隔符,只需对 $
、#
或 ?
使用前瞻性。这将在分隔符之前的 zero-width 位置拆分您的字符串。没有角色会lost/consumed为什么会爆
代码:(Demo)
$str = 'participant-$id#-group';
var_export(
preg_split('/(?=[$#?])/', $str)
);
输出:
array (
0 => 'participant-',
1 => '$id',
2 => '#-group',
)
在解析具有多个定界符的字符串并将定界符保留在拆分的 'after' 部分时,我对 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
并将分隔符保留在段的开头吗?
试试这个:
$ar = preg_split('/($[^#]+)/', $str, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);
这个怎么样。我正在捕获分隔符,然后将它们放回原处。
<?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
)
*/
?>
您不需要捕获分隔符,只需对 $
、#
或 ?
使用前瞻性。这将在分隔符之前的 zero-width 位置拆分您的字符串。没有角色会lost/consumed为什么会爆
代码:(Demo)
$str = 'participant-$id#-group';
var_export(
preg_split('/(?=[$#?])/', $str)
);
输出:
array (
0 => 'participant-',
1 => '$id',
2 => '#-group',
)