假设我有以下内容作为输入:
Tonic,Love,(Original,Mix),house,dance,ton!c
以下是我试图获得的规则:
- 除了#2为true时,所有逗号都分隔单个关键字
- 逗号在圆括号之间没有影响。
- 所有圆括号将关键字组合为一个关键字
我现在有以下正则表达式:
#([(?.*?)])|(.*?),#
我最终得到了这样的结果:
Tonic
Love
(Original
Mix)
house
dance
这和用逗号分隔是一样的,只是我丢失了最后一个关键字ton!c
。我不要求在一个正则表达式中实现所有这些,但它是首选。
这个简单的例子:([^)]*)|[^,]*
应该可以工作。
您可以在上拆分
/,(?![^(]*))/
或全部匹配:
/([^)]*)|[^,()]*/
至少是你的例子。
I.e:
$array = preg_split('/,(?![^(]*))/', $string);
尝试
"(([^)]+))|([^(][^,]*)(,(([^)]+))|([^(][^,]*))*"
这会同时捕获所有组。