“globbing”一个文件只获得那些名为numericlly的文件?

时间:2011-05-01 01:53:01

标签: php pattern-matching

我想使用php函数glob()来获取遵循这种模式的文件:

[arbitrary-text-code]-[any number].jpg

我似乎找到了这样做的方法......还有,还有另一种方法吗?

感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

[any number]的范围是否随意?如果是,我认为您最好的选择是preg_filter()

$text = '.+';
$number = '\d+';
$regex = $text . '-' . $number . '[.]jpg$';

$result = preg_filter('~' . $regex . '~i', '$0', glob('/your/path/*.jpg');

但是,如果[any number]有一个简单的小范围(例如[0-9]GLOB_BRACE是你的朋友:

$result = glob('/your/path/*-{0,1,2,3,4,5,6,7,8,9}.jpg', GLOB_BRACE);

PS:我没有测试过以下内容,我不确定它是否有效,但是值得一试。


如果您的[any number]位于099之间,则此可能会工作:

$result = glob('/your/path/*-{0,1,2,3,4,5,6,7,8,9}{,0,1,2,3,4,5,6,7,8,9}.jpg', GLOB_BRACE);

同样,对于0999

$result = glob('/your/path/*-{0,1,2,3,4,5,6,7,8,9}{,0,1,2,3,4,5,6,7,8,9}{,0,1,2,3,4,5,6,7,8,9}.jpg', GLOB_BRACE);

你明白了。这里的诀窍是后面的括号上的空选项 - 让我知道它是怎么回事。


  

GLOB_BRACE - 将{a,b,c}扩展为   匹配'a','b'或'c'。

答案 1 :(得分:0)

我不认为有glob重复模式的方法,比如任何一次或多次,所以至少你需要像'*-*[0123456789].jpg'这样的方法,然后<{1}}或其返回的数组上的某些内容。

我过去曾将sfFinder从Symfony中删除(使用doc here - 它已过时但API没有太大变化)来执行此类操作,因此我不必编写自己的解决方案: - 我假设在PEAR或Zend Framework中可能有类似的东西,但如果你已经使用过其中一个。