用逗号表示preg_split,忽略括号,PHP

PPP*_*PHP 1 php regex parentheses

我必须拆分一个字符串,我想避免在括号内用逗号分隔它.那么我该如何实现呢?

例:

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

result should be:

array(
   [0] => string1 (sString1, sString2,(ssString1, ssString2))
   [1] => string2
   [2] => string3
)
Run Code Online (Sandbox Code Playgroud)

lon*_*day 7

你试图用正则表达式来解决这个问题.循环遍历字符串的字符并进行此类检查非常简单.像下面这样的东西应该工作:

<?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',
)*/
Run Code Online (Sandbox Code Playgroud)

请注意,如果要分割多个单字符字符串,则此技术要难得多.