我试图将我的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);
答案 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(),
];