我试图用PHP列出目录中匹配特定模式的文件(递归或非递归)。我不太擅长正则表达式,如果您能提供任何帮助,将不胜感激。我可以搜索文件名返回的文字意义检查,但我认为这不是一个好主意 :)
更新+最终解决方案:2011年1月18日@ 8:06 PM
我发现了另一种方法来完成我所要寻找的内容,一旦我更了解正则表达式。尽管我对正则表达式感到完全沮丧,但由于我的朋友抽空向我解释了其中一些内容比我在在线指南中找到的简单得多,我现在已经有一点点理解了。
这个解决方案基本上检查具有以“prefixone”或“prefixtwo”为前缀的特定图像,同时还验证它是否是特定类型的图像(jpg、jpeg、png)并匹配以下任何格式之一。
根据您从WordPress传递的slug(我正在使用此项功能),它将与该正则表达式匹配。以下是样例列表:
更新+最终解决方案:2011年1月18日@ 8:06 PM
我发现了另一种方法来完成我所要寻找的内容,一旦我更了解正则表达式。尽管我对正则表达式感到完全沮丧,但由于我的朋友抽空向我解释了其中一些内容比我在在线指南中找到的简单得多,我现在已经有一点点理解了。
这个解决方案基本上检查具有以“prefixone”或“prefixtwo”为前缀的特定图像,同时还验证它是否是特定类型的图像(jpg、jpeg、png)并匹配以下任何格式之一。
根据您从WordPress传递的slug(我正在使用此项功能),它将与该正则表达式匹配。以下是样例列表:
prefixone.123-abc._tag1.001.jpg
prefixone.345-xyz._tag1.002.jpeg
prefixtwo.123-abc._tag2._tag1.003.jpg
prefixone.123-abc._tag2.004.jpeg
prefixtwo.345-xyz._tag2._tag3._tag1.005.jpg
prefixtwo.123-abc._tag1.001.jpg
prefixone.345-xyz._tag1.001.png
prefixtwo.456-rst._tag1.001.png
我们的opendir()函数返回的文件列表中,所有这些可能与slug匹配的文件都可以是匹配项。不管文件名中标签信息的顺序如何。
希望这能帮助另一个正在苦苦挣扎的正则表达式用户。学习它确实很痛苦,但一旦你理解了一些基本的东西,其余的就会迅速落入到位,开始构建你自己的正则表达式。
代码:
<?php
// create an array to hold directory list
$results = array();
// create a handler for the directory
$directory = $_SERVER['DOCUMENT_ROOT'].'/some/path/to/images/';
$handler = opendir($directory);
// open directory and walk through the filenames
while ($file = readdir($handler)) {
// if file isn't this directory or its parent, add it to the results
if ($file != "." && $file != "..") {
// check with regex that the file format is what we're expecting and not something else
if(preg_match('#^(prefixone|prefixtwo)[^\s]*\.'.$wordpress-slug.'\.[^\s]+(\.(jpg|jpeg|png))#', $file)) {
// add to our file array for later use
$results[] = $file;
}
}
}
?>
实际上,我并不需要递归来完成这个任务,但在网上确实有很多递归的示例,而且那真的是我最不用担心的。根据模式进行内容隔离是这个任务的核心,因此上面的代码已经足够。
顺便说一句:
对于那些昨天指出“已接受的评论”的人,我不知道我错过了那件事,并为此道歉。我当时情绪很糟糕,如果我对评论发表了任何冲动的言论,请原谅。这是一个伟大的社区,我很高兴能够做出贡献。