PHP根据正则表达式中的参数确定文件

时间:2009-11-10 16:28:14

标签: php regex file

我正在尝试根据特定参数确定文件。首先,我递归地遍历目录结构,如下所示:

  • C:/用户/编程器/下载/评论/ XBOX
  • C:/用户/编程器/下载/评论/ PS3
  • C:/用户/编程器/下载/评论/ GBA

请注意字符串末尾的控制台游戏类型。在此之后,我们有以下内容:

  • C:/Users/programmer/Downloads/reviews/XBOX/p123.html
  • C:/Users/programmer/Downloads/reviews/XBOX/r123.html

如果您在第二部分中注意到,有一个文件有一个p,另​​一个文件有一个r。

我的最终目标是确定哪些文件是p *,哪些是r *,所以我的正则表达式我想成为以下内容(伪代码)

/console/p*/

/console/r*/

总之,我需要遍历文件,并在函数结束时知道文件名和文件类型(p或r),而不关心控制台类型。谢谢你的帮助

4 个答案:

答案 0 :(得分:2)

PHP glob函数将遍历一个匹配满足给定条件的所有文件的目录。

$files = array();

foreach(glob("C:/Users/programmer/Downloads/reviews/*/p*.html") as $filename) {
    $files['p'][] = $filename;
}

foreach(glob("C:/Users/programmer/Downloads/reviews/*/r*.html") as $filename) {
    $files['r'][] = $filename;
}

这将为您提供如下所示的数组:

array (
    p =>  array (
        0 => p123.htm
        1 => p456.htm
    )

    r => array (
        0 => r123.htm
        1 => r456.htm
    )
)

答案 1 :(得分:0)

 preg_match('~/([pr])[^/]+$~', $file, $m);
 if($m[1] == 'p') something
 if($m[1] == 'r') something else

//编辑:虽然这直接回答了你的问题,但这不是最有效的方法。根据你的需要,你最好像其他人建议的那样使用glob(),或者更好地使用glob()+ preg_grep(),或者更好的是使用数据库而不是文件。你能告诉我们更多关于想要实现的目标吗?

答案 2 :(得分:0)

假设您只想获取文件列表,请按文件名的第一个字母区分:

遍历目录树,将文件名转换为$ filename。

之类的变量

$ files [$ filename [0]] [] = $ filename;

答案 3 :(得分:0)

glob('C:/Users/programmer/Downloads/reviews/*/p*.html');
glob('C:/Users/programmer/Downloads/reviews/*/r*.html');