我需要一个与逗号不匹配的正则表达式,它不在'['和']'或'('和')'或'{'和'}'之间。其他分组符号无关紧要。我试图解决这个问题,但我无法想出任何能够实现这一目标的东西。
正则表达式将与PHP preg_split函数一起使用,以在匹配的逗号上拆分字符串。
包含逗号和分组符号的示例字符串:
<div>Hello<div>,@func[opt1,opt2],{,test},blahblah
字符串应按如下方式拆分:
1: '<div>Hello<div>'
2: '@func[opt1,opt2]'
3: '{,test}'
4: 'blahblah'
我只想到了这一点,但此时所有的分组符号都保证有匹配的符号,这有助于。
任何帮助都会非常适合=)
答案 0 :(得分:10)
实际上,完成这种分裂并非不可能。请考虑以下代码:
$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"
}
答案 1 :(得分:1)
我不认为它可以在正则表达式中完成。基本问题是这需要可变长度的负面观察(不允许任何[({后面没有a))}),这不是RE目前拥有的能力。