爆炸逗号,但忽略括号php中的逗号

时间:2019-10-25 05:00:19

标签: php regex explode

我已经完成了很多答案,但是没有什么能给我期望的结果。

我想爆炸“啤酒-国内,食品-零食(薯片,蘸酱,坚果),啤酒-进口,未经分类”,结果应该是这样

Array
(
    [0] => Beer - Domestic
    [1] => Food - Snacks (chips,dips,nuts)
    [2] => Beer - Imported,
    [3] => UNCATEGORIZED
)

这是我尝试过的

$string = "Beer - Domestic,Food - Snacks (chips,dips,nuts),Beer - Imported,UNCATEGORIZED";
$keywords = preg_split("/(?<=\)),/", $string);

$keywords = preg_split("/[\s,]+/", $string);

preg_match_all(' /[^(,]*(?:([^)]+))?[^),]*/', $string, $matches);

preg_match_all('/[^(,\s]+|\([^)]+\)/', $string, $matches);

这给了我以下结果

    Array
(
    [0] => Beer - Domestic,Food - Snacks (chips,dips,nuts)
    [1] => Beer - Imported,UNCATEGORIZED
)

我想做的只是爆炸','不在括号内

1 个答案:

答案 0 :(得分:3)

通过使用以下模式,我们可以对您当前的regex拆分逻辑进行小幅修正:

p:hover { overflow: visible; }

这表示要以逗号分割,但(如果该逗号不在括号内的术语内出现)。它通过使用否定的超前检查功能来工作,即在未首先看到开头,(?![^(]+\)) 的情况下看不到),这意味着逗号位于(项之内。

(...)

此打印:

$string = "Beer - Domestic,Food - Snacks (chips,dips,nuts),Beer - Imported,UNCATEGORIZED";
$keywords = preg_split("/,(?![^(]+\))/", $string);
print_r($keywords);