可悲的是,我不得不问这个问题,但在整个早上都在思考这个问题之后,我放弃了。在线搜索、手册页、文档,似乎都没有给我一个关于我尝试做的事情的决定性答案。
寻找 PHP 函数preg_match的正则表达式以匹配字符串与模式。现在这种模式让我头疼。
该模式应表达以下内容:字符串以“_MG_”或“IMG_”或“DSC_”开头,后跟四个数字,然后是可选的“-N”,其中 N 是另一个数字。例如,“IMG_0123”或“DSC_9876-3”是有效的。其他一切都应该被拒绝。
我想出了各种模式,但它们似乎都不起作用。例如,我试过
(_MG_|IMG_|DSC_)[0-9]{4}(-[0-9])?
这在不同的变体中使用 ( ) 和撇号围绕各种子表达式并使用 ? vs {0,1} 等等。(我尝试使用 grep,但仍然没有匹配项。)是的,我知道我需要为 PHP 添加“/.../”,但为了便于阅读,我在这里省略了它。
我什至可以用一个表达式来表达这一点,还是必须多次调用匹配函数?如果需要多个匹配项,我最好为自己匹配的这个特定字符串编写一个小型解析器。
谢谢!
编辑:这是我正在使用的代码
// Iterate over all images in this gallery folder.
if ($h = opendir($dir)) {
while (($f = readdir($h)) !== false) {
// Skip images whose name doesn't match the requirement.
if (0 == preg_match("/(_MG_|IMG_|DSC_)[0-9]{4}(-[0-9]){0,1}/", $f)) {
continue;
}
...
}
}
这也允许像“_MG_7020-1-2.jpg”或“_MG_7444-5-6.2.jpg”或“IMG_6543_2_4_tonemapped.jpg”这样的图像名称,但这不是我想要允许的。