You will encounter a terrible mess trying to do this with regular expression. It is very simple to iterate over the string characters and perform such a check. Something like the following should work:
<?php
function specialsplit($string) {
$level = 0;
$ret = array('');
$cur = 0;
for ($i = 0; $i < strlen($string); $i++) {
switch ($string[$i]) {
case '(':
$level++;
$ret[$cur] .= '(';
break;
case ')':
$level--;
$ret[$cur] .= ')';
break;
case ',':
if ($level == 0) {
$cur++;
$ret[$cur] = '';
break;
}
default:
$ret[$cur] .= $string[$i];
}
}
return $ret;
}
var_export(specialsplit("string1 (sString1, sString2,(ssString1, ssString2)), string2, string3"));
Note that this method is much harder to do if you have more than a single-character string to split.
source
share