Php string explode string based on characters match with string condition

Php string explode string based on characters match with string condition

我有这样的字符串:

$string1 = '35 Hose & Couplings/350902 GARDEN HOSE COUPLING, PVC, 16\/19 MM"';

$string2 = '35 Hose & Couplings/350904 GARDEN HOSE TAP CONNECTOR, PVC, 3\/4" FEMALE THREAD"';

我试着把字符串分开,然后把它变成这样的数组:

$name1 = explode('/', $string1);
$name1 = trim(end($name1));
$name2 = explode('/', $string2);
$name2 = trim(end($name2));

/*
 #results
 $name1[0] = '35 Hose & Couplings';
 $name1[1] = '350902 GARDEN HOSE COUPLING, PVC, 16\';
 $name1[2] = '19 MM"';
 ...
 #expected results
 $name1[0] = '35 Hose & Couplings';
 $name1[1] = '350902 GARDEN HOSE COUPLING, PVC, 16\/19 MM"';
 ...
*/

我想在只有/的时候爆串,遇到\/的时候不应该 展开字符串,如果包含 \/ 我的代码仍然会展开字符串,有没有办法做到这一点?

你可以这样走:

$string1 = str_replace("\/","@",$string1);
$name1 = explode('/', $string1);
foreach($name1 as $id => $name) {
    $name1[$id] = str_replace("@","\/",$name1[$id]);
}

有点麻烦,我知道,但应该可以解决问题。将其包装在函数中以提高可读性。

基本上我用一个临时字符串替换了你不想爆炸的字符串,并在爆炸后恢复它。

您可以使用带负数的正则表达式 look-behind:

$parts = preg_split('~(?<!\\)/~', $string1);

参见 eval.in

上的示例