preg_split 获取数组中的分隔符
preg_split get delimiters in an array
在使用 preg_split
时是否可以将分隔符 return 按照它们被发现的顺序放入数组中?
所以以此为例:
$string = "I>am+awesome";
preg_split("/>|\+/", $string);
然后得到类似这样的输出:
Array(
Array(
0 => "I",
1 => "am",
2 => "awesome"
),
Array (
0 => ">"
1 => "+"
)
)
我意识到我可以进行拆分,然后遍历原始字符串并在找到它们时添加它们,但如果有的话,我正在寻找更好的方法。
使用捕获组 ()
和 PREG_SPLIT_DELIM_CAPTURE
:
preg_split("/(>|\+)/", $string, 0, PREG_SPLIT_DELIM_CAPTURE);
或者如@hsz 所述,(>|\+)
将是更好的模式。
$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) ">"
}
这是一种通过前瞻而不使用 PREG_SPLIT_DELIM_CAPTURE
使此正则表达式在其他平台(如 Java 没有此类标志的平台上工作)的方法:
print_r( preg_split('/(?<=[>|+])|(?=[>|+])/', $string ) );
Array
(
[0] => I
[1] => >
[2] => am
[3] => +
[4] => awesome
)
在使用 preg_split
时是否可以将分隔符 return 按照它们被发现的顺序放入数组中?
所以以此为例:
$string = "I>am+awesome";
preg_split("/>|\+/", $string);
然后得到类似这样的输出:
Array(
Array(
0 => "I",
1 => "am",
2 => "awesome"
),
Array (
0 => ">"
1 => "+"
)
)
我意识到我可以进行拆分,然后遍历原始字符串并在找到它们时添加它们,但如果有的话,我正在寻找更好的方法。
使用捕获组 ()
和 PREG_SPLIT_DELIM_CAPTURE
:
preg_split("/(>|\+)/", $string, 0, PREG_SPLIT_DELIM_CAPTURE);
或者如@hsz 所述,(>|\+)
将是更好的模式。
$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) ">"
}
这是一种通过前瞻而不使用 PREG_SPLIT_DELIM_CAPTURE
使此正则表达式在其他平台(如 Java 没有此类标志的平台上工作)的方法:
print_r( preg_split('/(?<=[>|+])|(?=[>|+])/', $string ) );
Array
(
[0] => I
[1] => >
[2] => am
[3] => +
[4] => awesome
)