我已经完成了很多答案,但是没有什么能给我期望的结果。
我想爆炸“啤酒-国内,食品-零食(薯片,蘸酱,坚果),啤酒-进口,未经分类”,结果应该是这样
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
)
我想做的只是爆炸','不在括号内
答案 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);