分解逗号但忽略括号内的逗号 php

explode commas but ignore commas within brackets php

我已经完成了很多答案,但没有一个是我想要的答案。

我要爆"Beer - Domestic, Food - Snacks (chips, dips, nuts), Beer - Imported, UNCATEGORIZED"结果应该是这样

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
)

我只想分解不在括号内的 ','

我们可以使用以下模式对您当前的正则表达式拆分逻辑进行轻微修正:

,(?![^(]+\))

这表示以逗号分隔,但 如果该逗号未出现在括号中的术语内。它通过使用否定先行检查来工作,以确保我们在没有首先看到开头 ( 的情况下没有看到 ),这意味着逗号在 (...) 项内。

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

这会打印:

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