12

是否可以使用 php glob 函数匹配任意数量的数字?我正在尝试匹配以二到四位数字结尾的图像缩略图的文件名。

我知道我可以提供一个数字范围,但这仅匹配一个字符:

glob("thumbname-[0-9]-[0-9].jpg")

这将匹配 thumbname-1-1.jpg 但不匹配 thumbname-10-10.jpg 等。

4

4 回答 4

17

尝试使用:glob("thumbname-[0-9]*-[0-9]*.jpg")

我做了一个测试,它对我有用。

于 2013-01-24T17:01:17.080 回答
4

glob() 的替代方法,使用带有正则表达式的 recursiveDirectoryIterator

$Directory = new RecursiveDirectoryIterator('path/to/project/');
$Iterator = new RecursiveIteratorIterator($Directory);
$Regex = new RegexIterator($Iterator,
    '/^thumbname-[0-9]*-[0-9]*\.jpg$/i', 
    RecursiveRegexIterator::GET_MATCH
);
于 2013-01-24T17:03:21.620 回答
2

您可以将数字拆分为不同的全局数组并将它们合并。

例如,首先将 0-9 的所有图像放入一个数组中:

$g1 =  glob('thumbname-[0-9].jpg');

之后,您创建另一个数组,其中包含从 10 到 99 的数字:

$g2 =  glob('thumbname-[0-9][0-9].jpg');

现在您将这 2 个数组合并为一个并从 0-99 中获取所有数组:

$gResult = array_merge($g1, $g2);

您可以随意扩展它,只需添加一个[0-9]

于 2016-11-30T10:44:14.370 回答
0

以下 glob 模式很复杂,但有效:

+([0-9]|!(*[a-z]*)[0-9])

匹配1、13、50000 _ _

不匹配:1a , a1 , 1a1

于 2021-09-14T14:37:36.693 回答