在 PHP 中分解一个没有分隔符的完整字符串


Exploding a full string without a delimiter in PHP

如果我得到一个像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 数组。