正则表达式匹配逗号,而不是分组符号之间的逗号

问题描述

| 我需要一个正则表达式,匹配一个不在\'[\'和\'] \'或\'(\'和\')\'或\'{\'和\'} \之间的逗号'。其他分组符号无关紧要。我试图弄清楚,但是我无法提出任何可以实现这一目标的东西。 正则表达式将与PHP preg_split函数一起使用,以在匹配的逗号上分割字符串。 包含逗号和分组符号的示例字符串:
<div>Hello<div>,@func[opt1,opt2],{,test},blahblah
该字符串应按如下所示拆分:
1: \'<div>Hello<div>\'
2: \'@func[opt1,opt2]\'
3: \'{,test}\'
4: \'blahblah\'
我只是想到了这一点,但是在这一点上,所有分组符号都必须保证具有匹配的符号,以防万一。 任何帮助将得到极大的应用=)     

解决方法

实际上,完成拆分并非并非不可能。考虑以下代码:
$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\"
}
    ,我不认为可以用正则表达式来完成。基本的问题是,这需要可变长度的负向后看(不允许任何[[{{没有后面跟有])}),并且这不是RE当前具有的功能。     

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...