我有一个HTML模板(作为单个字符串),其中包含用###字符括起来的各种键。例如,这些键可以是### textItem1 ###,### textItem2 ###等等......
现在,如何在该HTML模板/字符串中找到###中包含的所有键?我想读取键,将它们保存在一个数组中,然后遍历数组,以便用适当的文本项替换键(也可以用相同的键表示,但在另一个数组中)。
我正在使用PHP。
谢谢!
答案 0 :(得分:1)
您可以使用PHP preg_match_all
函数的正则表达式:
$pattern = '/###(.+?)###/';
$string = 'This is a text with ###textItem1### and ###textItem2### in it. It also has ###textItem3### and ###textItem4### as well';
preg_match_all($pattern, $string, $matches);
print_r($matches[1]);
PHPFiddle链接:http://phpfiddle.org/main/code/psad-tq9r
答案 1 :(得分:1)
这也有效。
$string = 'hello, this is [@firstname], i am [@age] years old';
preg_match_all('~\[@(.+?)\]~', $string, $matches);
var_dump( $matches );
答案 2 :(得分:0)
您可以创建像这样的自定义函数
function getdatabetween($string, $start, $end){
$sp = strpos($string, $start)+strlen($start);
$ep = strpos($string, $end)-strlen($start);
$data = trim(substr($string, $sp, $ep));
return trim($data);
}
echo getdatabetween(" ###textItem1###","###", "###");
答案 3 :(得分:0)
您可以使用preg_match_all
例如,这是您的模板代码
<?php
$string = '
<html>
<head>
<title>###title###</title>
</head>
<body>
###content###
</body>
</html>
';
这是您要替换的数据
$data = array("title" => 'hello world', 'content' => 'Page content here ....');
你可以像这样替换它
function getTemplate($string, $data){
preg_match_all("/[###]{3}+[a-z0-9_-]+[###]{3}/i", $string, $matches);
foreach ($matches[0] as $key => $match) {
$string = str_replace($match, $data[str_replace('#', '', $match)], $string);
}
return $string;
}
echo getTemplate($string, $data);
输出
<html>
<head>
<title>hello world</title>
</head>
<body>
Page content here ....
</body>
</html>