<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
[{CONTENT:meta}]
[{CONTENT:title}]
[{CONTENT:head}]
</head>
[{CONTENT:open_body}]
<p>[{LOCATION:main_1}]</p>
<p>[{LOCATION:main_1}]</p>
</body>
</html>
我在"template_file"
中拥有上述$string
。我试图做一个循环遍历字符串的循环,并在每次迭代给我标签的左侧,标签本身在一个新的变量,然后在另一个字符串的右侧。我不能在这里使用str_replace
因为我需要在替换之前提取标签内部的内容。
输出类似于:
$string_left = everything up to a "[{"
$command = "CONTENT:meta"
$string_right= everything after the "}]".
然后我会使用CONTENT:meta
处理数据,然后将事物重新组合在一起(string_left + new data + string_right)
然后继续执行,直到整个事情被解析。
答案 0 :(得分:2)
您可以使用相对简单的正则表达式执行此操作:
$inputString = "left part of string [{inner command}] right part of string";
$leftDelim = "\[\{";
$rightDelim = "\}\]";
preg_match("%(.*?)$leftDelim(.*?)$rightDelim(.*)%is", $inputString, $matches);
print_r($matches);
这将演示如何使用正则表达式。 delim变量中的额外斜杠是因为你的分隔符使用正则表达式字符,所以你需要转义它们。
答案 1 :(得分:1)
您可以将preg_replace
与匹配[{...}]
的正则表达式一起使用,以及使用匹配的“命令”并返回合适的替换字符串的替换函数:
$output = preg_replace('/\[{([^}]*)}\]/e', 'my_replacer(\'$1\')', $string);
定义my_replacer
如下:
function my_replacer($command) {
...
return $replacement;
}
答案 2 :(得分:0)
为什么不直接使用模板软件?这是一个很重要的清单。
http://www.webresourcesdepot.com/19-promising-php-template-engines/