Preg_match帮助:选择文件夹中的文件

时间:2009-10-02 03:07:27

标签: php

我有以下代码从文件夹中选择所有不同的模板文件...我拥有的文件名是:

template_default.php

template_default_load.php

template_sub.php

template_sub_load.php

我只想在文件名中选择没有_load的那些,所以我使用了这段代码:

preg_match('/^template_(.*)[^[_load]]{0}\.php$/i', $layout_file, $layout_name)

代码工作正常,除了它从结果中删除最后一个字符...当我回显$ layout_name [1]时,它显示的是默认或子,它显示默认和su ...

我的代码有什么问题?

2 个答案:

答案 0 :(得分:2)

这部分完全是小溪:

[^[_load]]{0}

这是你想要的正则表达式:

/^template_(.*)(?<!_load)\.php$/i

答案 1 :(得分:0)

你必须使用negative assertions (请阅读下面的原因)

preg_match('/^template_(.*?)(?!_load)\.php$/i', $layout_file, $layout_name)

编辑:来想一想,正则表达式实际上不会起作用,因为{_ 1}}部分会消耗“_load”。我的建议:不要使用preg_match()来捕获名称,使用它来跳过那些以.*?结尾的名称,例如

_load