如果我得到一个像BA00008424BA00008425BA00008426
这样的字符串。我怎样才能将这些分解成:
['BA00008424', 'BA00008425', 'BA00008426']
从这个例子..
$pizza = "piece1|piece2|piece3|piece4|piece5|piece6";
$pieces = explode("|", $pizza);
在这里,他们以"|"但我想在每个"BA"之前爆炸。
将
BA
替换为 BA[space]
,然后用空格作为分隔符将其分解,并抓取除第一个元素之外的所有元素,因为它包含一个空格:
$str = 'BA00008424BA00008425BA00008426';
$str = str_replace('BA', ' BA', $str);
print_r(array_slice(explode(' ', $str), 1));
输出:
Array
(
[0] => BA00008424
[1] => BA00008425
[2] => BA00008426
)
演示
如果BA***
的长度总是相同,你可以尝试使用str_split。否则,您可以通过"BA"爆炸并将BA添加到爆炸的碎片中。
如果数字始终具有固定长度,则可以使用str_split。
$str = "BA00008424BA00008425BA00008426";
$output = str_split($str, 10);
您可以使用preg_match_all
<?php
$str="BA00008424BA00008425BA00008426";
$data=array();
preg_match_all('/'w{2}'d{8}/', $str, $data);
print_r($data);
// OUTPUT- Array ( [0] => Array ( [0] => BA00008424 [1] => BA00008425 [2] => BA00008426 ) )
?>
首先,您可以在爆炸后将此值替换为空格
请参阅以下示例:
$str = "BA00008424BA00008425BA00008426";
$str = str_replace('BA', ',BA', $str);
print_r(array_slice(explode(',', $str), 1));
$arr 2 = str_split($str, 10);
会做诀窍如果它总是十长
所有代码的长度都一样吗?在这种情况下,您可以使用:
$str = 'BA00008424BA00008425BA00008426';
var_dump(str_split($str, 10));
如果它们的长度不同,您可以预先匹配它们,但我宁愿以另一种方式保存输入值。
强制性正则表达式版本。虽然我真的很喜欢 Shankar 的"插入空格"答案,而且正则表达式可能会很慢。
也就是说,鉴于您有一个清晰的模式(两个字符前缀后跟数字),我认为这是一个值得的选择:
<?php
$subject = 'BA00008424BA00008425BA00008426';
$pattern = '/BA'd+/';
preg_match_all($pattern, $subject, $matches);
print_r($matches);
收益 率:
Array
(
[0] => Array
(
[0] => BA00008424
[1] => BA00008425
[2] => BA00008426
)
)
此处的示例:https://eval.in/133117
希望这有帮助! :)
如果段的长度未知,但始终以非数字开头,则在数字和非数字之间拆分:
代码:(演示)
var_export(
preg_split('/'d+'K(?='D)/', 'BA00008424BA00008425BA00008426')
);
如果所有段都以 BA
开头,则在此之前的位置上拆分。
代码:(演示)
var_export(
preg_split('/'d+'K(?=BA)/', 'BA00008424BA00008425BA00008426')
);
正则表达式引擎可以更快地遍历字符串,如果它被告知贪婪地匹配一个或多个数字的序列。 然后,在匹配前瞻之前,忘记以前匹配的数字与'K
。
preg_match_all()
是另一种一次性调用技术,但它无助于生成 2D 数组,而preg_split()
更直接地创建所需的 1D 数组。