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