Regex可选非正则表达式组匹配


Regex optional non-regex group match

假设我有以下内容作为输入:

Tonic,Love,(Original,Mix),house,dance,ton!c

以下是我试图获得的规则:

  1. 除了#2为true时,所有逗号都分隔单个关键字
  2. 逗号在圆括号之间没有影响。
    • 所有圆括号将关键字组合为一个关键字

我现在有以下正则表达式:

#(['(?.*?')])|(.*?),#

我最终得到了这样的结果:

Tonic
Love
(Original
Mix)
house
dance

这和用逗号分隔是一样的,只是我丢失了最后一个关键字ton!c。我不要求在一个正则表达式中实现所有这些,但它是首选。

这个简单的例子:'([^')]*')|[^,]*应该可以工作。

您可以在上拆分

/,(?![^(]*'))/

或全部匹配:

/'([^)]*')|[^,()]*/

至少是你的例子。

I.e:

$array = preg_split('/,(?![^(]*'))/', $string);

尝试

"('([^)]+'))|([^(][^,]*)(,('([^)]+'))|([^(][^,]*))*"

这会同时捕获所有组。