【发布时间】:2013-01-08 12:18:32
【问题描述】:
php glob 函数可以匹配任意位数吗?我正在尝试匹配以两位到四位数字结尾的图像缩略图的文件名。
我知道我可以提供一个数字范围,但这只匹配单个字符:
glob("thumbname-[0-9]-[0-9].jpg")
这将匹配 thumbname-1-1.jpg 但不匹配 thumbname-10-10.jpg 等。
【问题讨论】:
php glob 函数可以匹配任意位数吗?我正在尝试匹配以两位到四位数字结尾的图像缩略图的文件名。
我知道我可以提供一个数字范围,但这只匹配单个字符:
glob("thumbname-[0-9]-[0-9].jpg")
这将匹配 thumbname-1-1.jpg 但不匹配 thumbname-10-10.jpg 等。
【问题讨论】:
以下 glob 模式很复杂,但有效:
+([0-9]|!(*[a-z]*)[0-9])
匹配:1、13、50000
不匹配:1a、a1、1a1
【讨论】:
您可以将数字拆分为不同的 glob 数组并合并它们。
例如,首先将 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() 的替代方法,使用带有正则表达式的 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
);
【讨论】:
尝试使用:glob("thumbname-[0-9]*-[0-9]*.jpg")
我做了一个测试,它对我有用。
【讨论】:
thumbname-10-10.jpg 而不 thumbname-1a-1b.jpg,你想使用glob("thumbname-*[0-9]-*[0-9].jpg").....但是,这也将匹配@987654325 @ 所以它不是完美。