• <i id='wJnhd'><tr id='wJnhd'><dt id='wJnhd'><q id='wJnhd'><span id='wJnhd'><b id='wJnhd'><form id='wJnhd'><ins id='wJnhd'></ins><ul id='wJnhd'></ul><sub id='wJnhd'></sub></form><legend id='wJnhd'></legend><bdo id='wJnhd'><pre id='wJnhd'><center id='wJnhd'></center></pre></bdo></b><th id='wJnhd'></th></span></q></dt></tr></i><div id='wJnhd'><tfoot id='wJnhd'></tfoot><dl id='wJnhd'><fieldset id='wJnhd'></fieldset></dl></div>
    1. <tfoot id='wJnhd'></tfoot><legend id='wJnhd'><style id='wJnhd'><dir id='wJnhd'><q id='wJnhd'></q></dir></style></legend>

        • <bdo id='wJnhd'></bdo><ul id='wJnhd'></ul>

        <small id='wJnhd'></small><noframes id='wJnhd'>

        PHP 和 RegEx:用不在括号内(以及嵌套括号)的逗号分

        时间:2023-10-03
        <tfoot id='jVNqb'></tfoot>
        <i id='jVNqb'><tr id='jVNqb'><dt id='jVNqb'><q id='jVNqb'><span id='jVNqb'><b id='jVNqb'><form id='jVNqb'><ins id='jVNqb'></ins><ul id='jVNqb'></ul><sub id='jVNqb'></sub></form><legend id='jVNqb'></legend><bdo id='jVNqb'><pre id='jVNqb'><center id='jVNqb'></center></pre></bdo></b><th id='jVNqb'></th></span></q></dt></tr></i><div id='jVNqb'><tfoot id='jVNqb'></tfoot><dl id='jVNqb'><fieldset id='jVNqb'></fieldset></dl></div>
          <bdo id='jVNqb'></bdo><ul id='jVNqb'></ul>

                <small id='jVNqb'></small><noframes id='jVNqb'>

                1. <legend id='jVNqb'><style id='jVNqb'><dir id='jVNqb'><q id='jVNqb'></q></dir></style></legend>

                    <tbody id='jVNqb'></tbody>
                  本文介绍了PHP 和 RegEx:用不在括号内(以及嵌套括号)的逗号分割字符串的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

                  问题描述

                  两天前,我开始研究代码解析器,但遇到了困难.

                  Two days ago I started working on a code parser and I'm stuck.

                  如何用不在括号内的逗号分割字符串,让我告诉你我的意思:

                  How can I split a string by commas that are not inside brackets, let me show you what I mean:

                  我要解析这个字符串:

                  one, two, three, (four, (five, six), (ten)), seven
                  

                  我想得到这个结果:

                  array(
                   "one"; 
                   "two"; 
                   "three"; 
                   "(four, (five, six), (ten))"; 
                   "seven"
                  )
                  

                  但我得到:

                  array(
                    "one"; 
                    "two"; 
                    "three"; 
                    "(four"; 
                    "(five"; 
                    "six)"; 
                    "(ten))";
                    "seven"
                  )
                  

                  如何在 PHP RegEx 中执行此操作.

                  How can I do this in PHP RegEx.

                  先谢谢你!

                  推荐答案

                  您可以更轻松地做到这一点:

                  You can do that easier:

                  preg_match_all('/[^(,s]+|([^)]+)/', $str, $matches)
                  

                  但是如果您使用真正的解析器会更好.也许是这样的:

                  But it would be better if you use a real parser. Maybe something like this:

                  $str = 'one, two, three, (four, (five, six), (ten)), seven';
                  $buffer = '';
                  $stack = array();
                  $depth = 0;
                  $len = strlen($str);
                  for ($i=0; $i<$len; $i++) {
                      $char = $str[$i];
                      switch ($char) {
                      case '(':
                          $depth++;
                          break;
                      case ',':
                          if (!$depth) {
                              if ($buffer !== '') {
                                  $stack[] = $buffer;
                                  $buffer = '';
                              }
                              continue 2;
                          }
                          break;
                      case ' ':
                          if (!$depth) {
                              continue 2;
                          }
                          break;
                      case ')':
                          if ($depth) {
                              $depth--;
                          } else {
                              $stack[] = $buffer.$char;
                              $buffer = '';
                              continue 2;
                          }
                          break;
                      }
                      $buffer .= $char;
                  }
                  if ($buffer !== '') {
                      $stack[] = $buffer;
                  }
                  var_dump($stack);
                  

                  这篇关于PHP 和 RegEx:用不在括号内(以及嵌套括号)的逗号分割字符串的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持html5模板网!

                  上一篇:str_split 没有自动换行 下一篇:使用 PHP 正则表达式匹配字符串中的任何 Unicode

                  相关文章

                  最新文章

                    <bdo id='sRnS3'></bdo><ul id='sRnS3'></ul>
                2. <i id='sRnS3'><tr id='sRnS3'><dt id='sRnS3'><q id='sRnS3'><span id='sRnS3'><b id='sRnS3'><form id='sRnS3'><ins id='sRnS3'></ins><ul id='sRnS3'></ul><sub id='sRnS3'></sub></form><legend id='sRnS3'></legend><bdo id='sRnS3'><pre id='sRnS3'><center id='sRnS3'></center></pre></bdo></b><th id='sRnS3'></th></span></q></dt></tr></i><div id='sRnS3'><tfoot id='sRnS3'></tfoot><dl id='sRnS3'><fieldset id='sRnS3'></fieldset></dl></div>
                  1. <legend id='sRnS3'><style id='sRnS3'><dir id='sRnS3'><q id='sRnS3'></q></dir></style></legend>

                    <small id='sRnS3'></small><noframes id='sRnS3'>

                    <tfoot id='sRnS3'></tfoot>