在条件下使用带有glob()的preg_match

时间:2014-08-09 12:46:24

标签: php

我目前正在测试我在谷歌找到的所有结果,但我不是那么幸运得到它。 我想要一个函数来搜索文件的通配符名称,例如: filename.patch.php 在我的文件夹中。如果文件名不存在,则将页面抛到404.但是,我不确定我是否正确行事。这是代码。

$results = glob("{manager/patches/$templateHandler/*.patch.php}", GLOB_BRACE);
if(preg_match_all($results, $pageHandler)) {
  include 'manager/patches/'.$templateHandler.'/'.$pageHandler.'.patch.php';
} else {
  include '404.php';
}

虽然我知道这里有一个数组输出,但那是我的问题。我不知道如何将输出提取到我的preg_match。

注意:我不是程序员,所以请耐心等待。

==

找到解决方案(到目前为止)!

$folder = glob("manager/patches/$templateHandler/*.patch.php");
$dir = implode(" ", $folder);

if(preg_match("/\b$pageHandler\b/i", $dir)) {
  include 'manager/patches/'.$templateHandler.'/'.$pageHandler.'.patch.php';
} else {
  include '404.php';
}

好的,我很高兴这个回答了我的问题,但是,我想咨询一下,如果这是标准的,可以安全使用吗?因为我看的输出显示正确。

1 个答案:

答案 0 :(得分:1)

这里有一些问题。

1)glob函数返回一个数组,而不是一个字符串。因此,您需要遍历数组并针对正则表达式测试所有返回的文件名。

2)preg_match_all在单个字符串中找到同一正则表达式的多个实例,这可能不是您想要的。 preg_match可能就是你想要的。

3)preg_match和preg_match都将返回一个数组,如果你指定它应该,通过提供数组名称作为第三个参数。它实际上并没有返回它...它只是在范围内可用。

preg_match($regex, $string, $matches)

现在可以在范围内使用$ matches。

$ matches的每个元素都包含不同的内容,但是你会对$ matches [0]感兴趣,这是第一个元素,它将是找到的匹配项。换句话说,如果$ matches [0] =='string_to_match',则找到了您要查找的字符串。同样,您可以测试返回值1(在字符串中找到表达式),或者0(错误或在字符串中找不到表达式)。

但总的来说,我不确定这是实现所需内容的最佳方式,特别是当glob()返回一个可以在测试时匹配(或不匹配)多个文件的数组时。