【问题标题】:Split String contain Brackets in PHP拆分字符串包含PHP中的括号
【发布时间】:2015-05-14 07:13:19
【问题描述】:

我有如下格式的字符串:

$string ='[(id,name,top,left,width,height,depth)filename|filename][(id,name,top,left,width,height,depth)filename|filename]';

我想提取方括号和简单括号的字符串,结果集就像

[0] =>(id,name,top,left,width,height,depth)
[1] => filename
[2] => filename

我该怎么做?我试过下面的代码:

explode("[" , rtrim($string, "]"));    

但不能正常工作。

【问题讨论】:

    标签: php regex explode


    【解决方案1】:

    您可以为此使用正则表达式,

    $re = "/\\[\\((.*?)\\)(.*?)\\]/s"; 
    $str = "[(id,name,top,left,width,height,depth)filename|filename][(id,name,top,left,width,height,depth)filename|filename]'"; 
    
    preg_match_all($re, $str, $matches);
    

    输出

    matches[1][0] => id,name,top,left,width,height,depth
    matches[1][1] => filename|filename
    

    regex

    【讨论】:

    • 有可能只有一个文件名,所以不需要用|(管道符号)分解。如果存在,需要检查
    • 我没听清楚。给定字符串的预期输出是什么?
    • 文件名是动态的,如果像 $string ='[(id,name,top,left,width,height,depth)filename][(id,name,top,left,width,高度,深度)文件名]';
    • 那么,如果字符串是这样的,[(id,name,top,left,width,height,depth)filename|filename] 那么你想忽略管道符号吗?
    【解决方案2】:

    使用此代码

    $string ='[(id,name,top,left,width,height,depth)filename|filename][(id,name,top,left,width,height,depth)filename|filename]';
    $array = explode('][',$string);
    $array = array_unique(array_filter($array));
    $singleArr = array();
    $singleArr[] = str_replace('[','',$array['0']);
    $singleArr[] = str_replace(']','',$array['1']);
    
    $singleArr = array_unique($singleArr);
    //print_r($singleArr);
    
    $blankArr = array();
    foreach($singleArr as $val)
    {
        $first = explode('|',$val);
        $blankArr['0'] = substr($first['0'],0,-8);
        $blankArr['1'] = substr($first['0'],-8);
        $blankArr['2'] = $first['1'];
    }
    print_r($blankArr);
    

    【讨论】:

      猜你喜欢
      • 2013-03-30
      • 1970-01-01
      • 2021-07-30
      • 2020-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-01
      相关资源
      最近更新 更多