在PHP中拆分/分解字符串

在PHP中拆分/分解字符串,php,string,explode,preg-split,Php,String,Explode,Preg Split,我需要把一根绳子劈开或炸开 K1123-Food, Apple, Z3456-Egg, Mushroom, M9902-Plant, Soil, Water, Q8876-Medicine, Car, Splitter 变成 K1123-Food, Apple Z3456-Egg, Mushroom M9902-Plant, Soil, Water Q8876-Medicine, Car, Splitter 欢迎提供有关如何应用preg_split或explode的想法 提前感谢。这里有一个

我需要把一根绳子劈开或炸开

K1123-Food, Apple, Z3456-Egg, Mushroom, M9902-Plant, Soil, Water, Q8876-Medicine, Car, Splitter
变成

K1123-Food, Apple
Z3456-Egg, Mushroom
M9902-Plant, Soil, Water
Q8876-Medicine, Car, Splitter
欢迎提供有关如何应用preg_splitexplode的想法


提前感谢。

这里有一个解决方案,使用
preg\u match\u all()

$s='K1123食品、苹果、Z3456鸡蛋、蘑菇、M9902植物、土壤、水、Q8876药品、汽车、拆分器';
$pattern='/(\w\d+-\w+(,[^\d]*)(,|$)/;
$matches=[];
preg_match_all($pattern,$s,$matches);
打印($matches[1]);
这个输出

Array
(
    [0] => K1123-Food, Apple
    [1] => Z3456-Egg, Mushroom
    [2] => M9902-Plant, Soil, Water
    [3] => Q8876-Medicine, Car, Splitter
)
好,这是一个高级解决方案,它试图捕获Toto提到的内容:

$s='K1123食品、苹果2、123-456、蘑菇、Z3456鸡蛋、蘑菇、M9902植物、土壤、水、Q8876药品、汽车、拆分器';
$pattern='/([A-Z]\d+-\w+(.(?!([A-Z]\d))+)+(,|$)/;
$matches=[];
preg_match_all($pattern,$s,$matches);
打印($matches[1]);
哪个输出

Array
(
    [0] => K1123-Food, Apple2, 123-456, Mushroom
    [1] => Z3456-Egg, Mushroom
    [2] => M9902-Plant, Soil, Water
    [3] => Q8876-Medicine, Car, Splitter
)
请记住,将结构自动正确地放入非结构化内容是不可能的。
每个可能的解决方案都将对数据的实际结构做出一些假设。

在我使用的数据字符串中,逗号之间的间距可能会有所不同,因此这个特殊的分解函数将不起作用。你能展示一下你自己尝试过的内容以及你在使用它时遇到的问题吗?那么可能吧
preg_split('/,\s+/',$string)
@Nick
preg_split('/,\s+/',$string)
返回K1123食物而不是K1123食物,苹果和Z3456鸡蛋而不是Z3456鸡蛋,Mushroom您需要限定
序列,后跟大写字符和数字,例如
preg_split('/,\s+(?=[A-Z]\d)/',$string)尝试使用
K1123食品、苹果2、123-456、蘑菇
是的,但这不是问题所在。你怎么知道字符串中永远不会有数字?@Toto查看我的第二个解决方案。