正则表达式匹配文件名中的字符串

时间:2013-04-13 05:14:40

标签: php regex

我正在尝试列出目录中所有PHP文件的列表,这些文件在名称的开头有一个特定的字符串(在我的例子中是一个日期戳),最后是一个特定的字符串“.php”。我的日期作为变量传递($ SearchDate)。我已成功设置PHP脚本以从我的目录中读取完整的文件列表,并且只是尝试使用preg_match来为我过滤列表。不幸的是,即使我曾多次尝试this cheatsheet,我在RegEx完全失败了。

我所拥有的是产生错误而没有结果:

$SearchDate = '2013-02'; //example for february of 2013

if(preg_match('#^('.$SearchDate.')+[:graph:]{1}(\.(pdf))#', $file)) {
   //do something
}

我也尝试过:

preg_match('#^\Q'.$SearchDate.'\E+[:graph:]{1}\Q.pdf\E#', $file)

我的文件名如下所示:

  

2013-02-fileNameMightBeAlphaOr1234567890.pdf

我得到的错误如下:

  

警告:preg_match()[function.preg-match]:编译失败:POSIX   仅在偏移量为5的类中支持命名类   第26行/home/directory/myfile.php

3 个答案:

答案 0 :(得分:2)

  

我还需要检查它以“.pdf”结束,所以我基本上   需要文件名的开头和结尾,并不关心发生了什么   中间。

如果是这种情况,那么跟随正则表达式应该适合你:

if(preg_match('#^' . $SearchDate . '.*?\.pdf$#', $file)) {
   //do something
}

现场演示:http://ideone.com/h66GY0

答案 1 :(得分:1)

这个简单的正则表达式应该可行

preg_match('/^'.$SearchDate.'/', $file);

答案 2 :(得分:0)

{}添加到您的图表中......例如

     preg_match('#^('.$SearchDate.')+[{:graph:}]{1}(\.(pdf))#', $file)