Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/246.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.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
在文件中搜索以..开头和结尾的文本,并在数组中添加中间层(PHP)_Php_Regex_Arrays_String - Fatal编程技术网

在文件中搜索以..开头和结尾的文本,并在数组中添加中间层(PHP)

在文件中搜索以..开头和结尾的文本,并在数组中添加中间层(PHP),php,regex,arrays,string,Php,Regex,Arrays,String,我需要解析很多文件,从所有文件中获取它们的头声明,并将它们全部添加到一个数组中。它们是否相同并不重要,因为我将使用array_unique after只获取唯一的一次。 有些文件的顶部有注释,所以我可以选择第一行。宣言是这样的: private ["_aaaaaaa", "_bbbbbb", "_ccccc", "_dddddddd"]; 但有时可能是这样(没有空间) 或者像这样(如果写它的人没有注意的话) 到目前为止,我得到了这个: <?php $str = 'private ["_a

我需要解析很多文件,从所有文件中获取它们的头声明,并将它们全部添加到一个数组中。它们是否相同并不重要,因为我将使用array_unique after只获取唯一的一次。 有些文件的顶部有注释,所以我可以选择第一行。宣言是这样的:

private ["_aaaaaaa", "_bbbbbb", "_ccccc", "_dddddddd"];
但有时可能是这样(没有空间)

或者像这样(如果写它的人没有注意的话)

到目前为止,我得到了这个:

<?php
$str = 'private ["_aaaaaaa","_bbbbbb","_ccccc","_dddddddd"];';
$arr = Array();
$start = 'private [';
$end = '];';

$pattern = sprintf(
    '/%s(.+?)%s/ims',
    preg_quote($start, '/'), preg_quote($end, '/')
);

if (preg_match($pattern, $str, $matches)) {
    list(, $match) = $matches;
    echo $match;
}
?>
尽管这还不包括它……另外,我将如何使它成为一个数组。。。? 有没有一个简单的方法可以做到这一点?我有一个函数可以解析一个文件夹和子文件夹中的所有文件…我只需要首先解析所有文件并生成这个数组,稍后我将在我的主函数中使用它。 任何帮助都将不胜感激。 -谢谢

这应该可以-

/*
    Function-> get_header()
    Input   -> The header string.
    Output  -> An array of header's parameters.
*/
function get_header($string){
    if(preg_match("/private\s?\[(.*?)\];/", $string, $matches)){
        return preg_split("/(\s*)?,(\s*)?/",$matches[1]);
    }
    return Array();
}

//Assuming these to be the different file headers.
$headers = Array(
    'private ["_aaaaaaa", "_bbbbbb", "_ccccc","_dddddddd"];',
    'private ["_4","_3","_2","_1" ];',
    'private["_a", "_b","_c", "_d"];'
);
$header_arr = Array();
foreach($headers as $h){
    $header_arr = array_merge($header_arr, get_header($h));
}
var_dump($header_arr);
输出-

/*
    array
      0 => string '"_aaaaaaa"' (length=10)
      1 => string '"_bbbbbb"' (length=9)
      2 => string '"_ccccc"' (length=8)
      3 => string '"_dddddddd"' (length=11)
      4 => string '"_4"' (length=4)
      5 => string '"_3"' (length=4)
      6 => string '"_2"' (length=4)
      7 => string '"_1" ' (length=5)
      8 => string '"_a"' (length=4)
      9 => string '"_b"' (length=4)
      10 => string '"_c"' (length=4)
      11 => string '"_d"' (length=4)
*/

令人惊叹的!从那时起,我可以轻松地将它们全部添加到一个数组中。但是当我打开文件时,如何使用preg_匹配来匹配标题?这是我最大的问题…我可以用file()读取每一行…但是使用pregmatch来获取隐私是一个棘手的部分
"_aaaaaaa","_bbbbbb","_ccccc","_dddddddd"
/*
    Function-> get_header()
    Input   -> The header string.
    Output  -> An array of header's parameters.
*/
function get_header($string){
    if(preg_match("/private\s?\[(.*?)\];/", $string, $matches)){
        return preg_split("/(\s*)?,(\s*)?/",$matches[1]);
    }
    return Array();
}

//Assuming these to be the different file headers.
$headers = Array(
    'private ["_aaaaaaa", "_bbbbbb", "_ccccc","_dddddddd"];',
    'private ["_4","_3","_2","_1" ];',
    'private["_a", "_b","_c", "_d"];'
);
$header_arr = Array();
foreach($headers as $h){
    $header_arr = array_merge($header_arr, get_header($h));
}
var_dump($header_arr);
/*
    array
      0 => string '"_aaaaaaa"' (length=10)
      1 => string '"_bbbbbb"' (length=9)
      2 => string '"_ccccc"' (length=8)
      3 => string '"_dddddddd"' (length=11)
      4 => string '"_4"' (length=4)
      5 => string '"_3"' (length=4)
      6 => string '"_2"' (length=4)
      7 => string '"_1" ' (length=5)
      8 => string '"_a"' (length=4)
      9 => string '"_b"' (length=4)
      10 => string '"_c"' (length=4)
      11 => string '"_d"' (length=4)
*/