将sku分成更小的部分

时间:2014-10-22 18:33:44

标签: php regex split

我试图将我的sku分成更小的部分,不幸的是,下面的代码不起作用 有时我的sku是12位数,有时是10位。

$this->skuMap['simple'][$sku] = [
    'RefId' => substr($sku, 0, 5),
    'Color' => substr($sku, 5, -3),
    'Name'  => $product->getName(),
];

我很确定有一种方法可以preg_split这个,但我不确定正则表达式,这是我失败的尝试。

$sku = preg_split(['/^[0-9]{5}/','/([0-9]{5})([0-9]{3})/'], $sku, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_OFFSET_CAPTURE);

2 个答案:

答案 0 :(得分:1)

您正在寻找的正则表达式是"/^([0-9]{5})([0-9]{3})([0-9]+)$/"

$matches = [];
if (preg_match("/^([0-9]{5})([0-9]{3})([0-9]+)$/", $string, $matches) !== -1) {

    $id = $matches[1];
    $color = $matches[2];
    $info = $matches[3];

} else {
    throw new \RuntimeException("bad SKU");
}

将其分为五位数,三位数,然后是任意数字的数字,每个数字都在不同的组中。

答案 1 :(得分:0)

接受上述内容,但这也有效。

$this->skuMap['simple'][$sku] = [
    'RefId' => substr($sku,0,5),
    'Color' => substr(substr_replace($sku,'',0,5),0,3),
    'Name'  => $product->getName(),
];