php花括号进入数组

时间:2010-04-16 03:35:22

标签: php brackets

我想查看一个打开的.txt文件,查看打开和关闭的大括号,如下所示:

file {

nextopen {
//content
}

}

不,这不是我自己的语言或任何东西,但我想得到nextopen函数和括号内的所有内容,以及文件函数内部的所有内容,如果你知道我的话,将它添加到数组中意思。所以大括号内的所有内容都在一个数组中。如果你知道怎么做,请回复。

数组应该如下所示:

array(
[file] => '{ nextopen { //content } }',
[nextopen] => '{ //content }'
);

1 个答案:

答案 0 :(得分:3)

基本算法就像下面的

  1. 对于每个序列{ no-braces-here },将其放入缓冲区并替换为识别其在缓冲区中的位置的幻数
  2. 重复(1)直到找不到更多序列
  3. 对于缓冲区中的每个条目 - 如果它包含幻数,请用缓冲区中相应的字符串替换每个数字。
  4. 我们正在寻找缓冲区
  5. 在php中

    class Parser
    {
        var $buf = array();
    
        function put_to_buf($x) {
            $this->buf[] = $x[0];
            return '@' . (count($this->buf) - 1) . '@';
        }
    
        function get_from_buf($x) {
            return $this->buf[intval($x[1])];
        }
    
        function replace_all($re, $str, $callback) {
            while(preg_match($re, $str))
                $str = preg_replace_callback($re, array($this, $callback), $str);
            return $str;
        }
    
        function run($text) {
            $this->replace_all('~{[^{}]*}~', $text, 'put_to_buf');
            foreach($this->buf as &$s)
                $s = $this->replace_all('~@(\d+)@~', $s, 'get_from_buf');
            return $this->buf;
        }
    
    
    
    }
    

    测试

    $p = new Parser;
    $a = $p->run("just text { foo and { bar and { baz } and { quux } } hello! } ??");
    print_r($a);
    

    结果

    Array
    (
        [0] => { baz }
        [1] => { quux }
        [2] => { bar and { baz } and { quux } }
        [3] => { foo and { bar and { baz } and { quux } } hello! }
    )
    

    如果您有任何问题,请与我们联系。