有正则表达式问题..
我有一系列目录,其中包含.htm模板...所有模板包都保存在文件夹tpl /中(不是那么重要)
tpl包含一个名为tpl_default的默认模板包。
我正在编写一个从当前模板文件中读取的函数,然后从默认目录中的同一文件中获取所有Tokens {TOKEN}。
// $file returns abundant/index/index.htm as an example. So need to change that to read tpl_default/index/index.htm
$file = preg_replace('/?WHAT/','tpl_default',$file); // loose the first directory and replace with the default dir....
$default_file = file_get_contents("../../tpl/".$file);
// read the default template and pull all the tokens....
$subject = $default_file;
$pattern = "/{.*?}/";
preg_match($pattern, $subject, $matches, PREG_OFFSET_CAPTURE, 3);
return $matches; // TODO: convert matches to <li> element
真正有第1行的正则表达式“?WHAT”的问题。每次第一个目录可能不同时,我如何只匹配第一个目录和通配符?
答案 0 :(得分:2)
您需要一个^
锚点,以便preg_replace()
仅替换第一个目录。并且您没有给出代表性文件路径的示例。 (它是以一个前导/
还是可能//
开头的?)在任何一种情况下,这都可以解决问题:
$file = preg_replace('%^(/*)[^/]+%','$1tpl_default',$file);
答案 1 :(得分:0)
试试这个正则表达式,我认为就是这样
'\/[\w\s_-]+\/'
答案 2 :(得分:0)
解决方案是:
$pattern1 = "%^(/*)[^/]+%";
$default_file = preg_replace($pattern1,'tpl_default',$file); // loose the first
$default_file = file_get_contents("../../tpl/".$default_file);
$subject = $default_file;
$pattern = '/\{.*?\}/';
preg_match($pattern, $subject, $matches, PREG_OFFSET_CAPTURE, 3);
return $matches;
感谢ridgerunner的解决方案