我有以下代码从文件夹中选择所有不同的模板文件...我拥有的文件名是:
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 ...
我的代码有什么问题?
答案 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