我在函数中收到了一个文件名。我想从其他目录返回与此文件(按文件名)类似的所有文件。我写了这个:
$thumbDir = $this->files_path.'thumbs/';
$toglob = $thumbDir.pathinfo($name, PATHINFO_FILENAME ).'_[0-9]+\x[0-9]+_thb.'.pathinfo($name, PATHINFO_EXTENSION);
foreach (glob($toglob) as $key => $value) {
echo $value;
}
但这不起作用。我搜索文件名是:
oldFileName_[one or more digits]x[one or more digits]_thb.oldFileNameExtension
如果有人帮助我,我将非常感激:)
glob() http://www.php.net/manual/en/function.glob.php确实是一个准正则表达式引擎。从对文档的评论来看,它允许?
and a *
:
glob 使用两个特殊符号,其作用类似于元字符和量词之间的混合。这两个字符是 * 和 ?
这 ?匹配除 / 之外的任何字符 1
* 匹配 0 个或多个除 / 之外的任何字符
如果有帮助,请将 * 视为 .* 和 ? 的 PCRE 等价物。作为点 (.) 的 PCRE 等价物
这意味着你不能使用你的表达_[0-9]+\x[0-9]+_thb.
in glob()
。相反,您可以查看整个目录并查看它是否与preg_match() https://www.php.net/preg_match:
$glob = glob('/path/to/dir/*');
foreach($glob as $file) {
if(preg_match('/_\d+x\d+_thb\./', $file)) {
// Valid match
echo $file;
}
}
意识到在glob(/path/to/dir/*);
, the *
不匹配/
所以这不会在子目录中获取任何文件。它只会循环遍历该路径中的每个文件和目录;如果你想更深入,你将不得不做一个递归函数。
注意我清理了你的表达 http://regex101.com/r/cU9eV4:
_\d+x\d+_thb\.
\d
大致等于[0-9]
(还包括阿拉伯数字字符等),不需要转义x
(so no \x
),并且您想逃避句点 (\.
).
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)