是否可以使用 php glob 函数匹配任意数量的数字?我正在尝试匹配以二到四位数字结尾的图像缩略图的文件名。
我知道我可以提供一个数字范围,但这仅匹配一个字符:
glob("thumbname-[0-9]-[0-9].jpg")
这将匹配 thumbname-1-1.jpg 但不匹配 thumbname-10-10.jpg 等。
尝试使用:glob("thumbname-[0-9]*-[0-9]*.jpg")
我做了一个测试,它对我有用。
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
);
您可以将数字拆分为不同的全局数组并将它们合并。
例如,首先将 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]
以下 glob 模式很复杂,但有效:
+([0-9]|!(*[a-z]*)[0-9])
匹配数:1、13、50000 _ _
不匹配:1a , a1 , 1a1