rou*_*lie 2 php regex string explode preg-split
我正在尝试使用多个分隔符(?? , ? , ?? , ?)来分解字符串.
例如,我有这个输入字符串:
$string = "(2.8 , 3.1) ? (??2.4 , ?3.0)";
Run Code Online (Sandbox Code Playgroud)
我想将它转换为这样的数组(预期输出):
Array
(
[0] => (2.8 , 3.1) ? (
[1] => ??
[2] => 2.4 ,
[3] => ?
[4] => 3.0)
)
Run Code Online (Sandbox Code Playgroud)
我最好的尝试打印我(当前输出):
Array
(
[0] => (2.8 , 3.1) ? (
[1] => ?
[2] => ?2.4 ,
[3] => ?3.0)
)
Run Code Online (Sandbox Code Playgroud)
这是我目前的代码:
<?php
function multiexplode ($delimiters,$string) {
return explode(
$delimiters[0],
strtr(
$string,
array_combine(
array_slice($delimiters,1),
array_fill(0,count($delimiters)-1,array_shift($delimiters))
)
)
);
}
$delimiters = array('??','?','??','?');
$test = array('2up??','1up?','2down??','1down?');
$newDel = array('2up','1up','2down','1down');
$array = array();
$strings = array(
"(2.8 , 3.1) ? (??2.4 , ?3.0)",
"(2.7 , 2.6) ? (?2.8 , ??3.0)",
"(2.0 , 3.4) ? (??2.8 , ??2.3)"
);
foreach($strings as $string){
foreach($test as $key => $reps){
$string = str_replace(
$delimiters[$key],
$reps,
$string
);
}
//echo $string;
$array[] = array_values(array_filter(multiexplode($newDel,$string)));
}
?>
Run Code Online (Sandbox Code Playgroud)
我正在构建它,就像那种格式,因为我将循环这些值并在powerpoint内部打印那些并且那些分隔符(箭头)具有不同的颜色
这应该适合你:
只需使用preg_split()并设置标志以保留分隔符.例如
<?php
$string = "(2.8 , 3.1) ? (??2.4 , ?3.0)";
$arr = preg_split("/(??|?|??|?)/", $string, -1, PREG_SPLIT_DELIM_CAPTURE);
print_r($arr);
?>
Run Code Online (Sandbox Code Playgroud)
输出:
Array
(
[0] => (2.8 , 3.1) ? (
[1] => ??
[2] => 2.4 ,
[3] => ?
[4] => 3.0)
)
Run Code Online (Sandbox Code Playgroud)