Регулярное выражение для соответствия запятой не между символами группировки

Мне нужно регулярное выражение, которое будет соответствовать запятой, которая НЕ находится между «[» и «]» или «(» и «)» или «{» и «}». Другие символы группировки не имеют значения. Я попытался понять это, но я не могу придумать ничего, что бы это сделало.

Регулярное выражение должно использоваться с функцией preg_split PHP для разделения строки на совпадающие запятые.

Примерная строка, содержащая запятые и группирующие символы:

<div>Hello<div>,@func[opt1,opt2],{,test},blahblah 

Строка должна делиться следующим образом:

 1: '<div>Hello<div>' 2: '@func[opt1,opt2]' 3: '{,test}' 4: 'blahblah' 

И я просто подумал об этом, но в этот момент все символы группировки гарантированно имеют соответствующие символы, и это помогает.

Любая помощь была бы БОЛЬШОЙ appriciated =)

Related of "Регулярное выражение для соответствия запятой не между символами группировки"

На самом деле это невозможно сделать. Рассмотрим этот код:

 $str = '<div>Hello<div>,(foo,bar),@func[opt1,opt2],{,test},blahblah'; $arr = preg_split('~([^,]*(?:{[^}]*}|\([^)]*\)|\[[^]]*])[^,]*)+|,~', $str, -1 , PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY); var_dump($arr); 

ВЫВОД:

 array(5) { [0]=> string(15) "<div>Hello<div>" [1]=> string(9) "(foo,bar)" [2]=> string(16) "@func[opt1,opt2]" [3]=> string(7) "{,test}" [4]=> string(8) "blahblah" } 

Я не думаю, что это можно сделать в регулярном выражении. Основная проблема заключается в том, что для этого требуется отрицательный внешний вид переменной длины (запретить любой [({, за которым не следует a))}), и это не возможность, которую RE имеет в настоящее время.