查找包含在特定字符中的字符串模式(PHP)

时间:2014-12-12 11:21:32

标签: php string replace

我有一个HTML模板(作为单个字符串),其中包含用###字符括起来的各种键。例如,这些键可以是### textItem1 ###,### textItem2 ###等等......

现在,如何在该HTML模板/字符串中找到###中包含的所有键?我想读取键,将它们保存在一个数组中,然后遍历数组,以便用适当的文本项替换键(也可以用相同的键表示,但在另一个数组中)。

我正在使用PHP。

谢谢!

4 个答案:

答案 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>