Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/243.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Preg_按逗号拆分,忽略括号,PHP_Php_Regex_Parentheses - Fatal编程技术网

Preg_按逗号拆分,忽略括号,PHP

Preg_按逗号拆分,忽略括号,PHP,php,regex,parentheses,Php,Regex,Parentheses,我必须拆分一个字符串,我希望避免在括号内用逗号拆分它。 那么我该如何实现这一点呢 例如: $string = "string1 (sString1, sString2,(ssString1, ssString2)), string2, string3"; result should be: array( [0] => string1 (sString1, sString2,(ssString1, ssString2)) [1] => string2 [2] =&

我必须拆分一个字符串,我希望避免在括号内用逗号拆分它。 那么我该如何实现这一点呢

例如:

$string = "string1 (sString1, sString2,(ssString1, ssString2)), string2, string3";

result should be:

array(
   [0] => string1 (sString1, sString2,(ssString1, ssString2))
   [1] => string2
   [2] => string3
)

如果你想用正则表达式来做这件事,你会陷入一片混乱。循环遍历字符串的字符并执行这种检查非常简单。类似于以下的方法应该可以工作:

<?php

function specialsplit($string) {
    $level = 0;       // number of nested sets of brackets
    $ret = array(''); // array to return
    $cur = 0;         // current index in the array to return, for convenience

    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;
                }
                // else fallthrough
            default:
                $ret[$cur] .= $string[$i];
        }
    }

    return $ret;
}

var_export(specialsplit("string1 (sString1, sString2,(ssString1, ssString2)), string2, string3"));

/*array (
  0 => 'string1 (sString1, sString2,(ssString1, ssString2))',
  1 => ' string2',
  2 => ' string3',
)*/

我尽力了。。。它可能对你有用

<?php
$string = "string1 (sString1, sString2,(ssString1, ssString2)), string2, string3";
$pattern = '#(?<=\)),#';
$out=preg_split($pattern,$string);
$more=split(",",array_pop($out));
$res=array_merge($out,$more);
echo "<pre>";
print_r($res);

?>


这不是正则表达式的作业,因为此表达式不是正则表达式。与……相比,同样的事情。:)这是一次不错的尝试。但是对于
s1(s2,(s3,s4),(s5,s6)),s7
@codeaddick,失败了。这就是为什么我说我尽了最大的努力。。我的解决方案只是以问题为导向。对不起,我试着用preg_split来解决问题,花了2个多小时,但没有用。。。。非常感谢你的代码:)