正则表达式:如何整体替换一组标签?

时间:2011-04-20 08:47:06

标签: html regex preg-replace

我想用一组新的元标记替换所有元标记。我有以下代码

<?php
$header = '
<link rel="shortcut icon" href="/images/favicon.ico" />
<title>meta replace test</title>
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" /> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
<meta name="description" content="..." />
<script type="text/javascript" src="script.js"></script>
<script type="text/javascript" src="script.js"></script>
<script type="text/javascript" src="script.js"></script>';


$meta = '<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
    <meta http-equiv="content-style-type" content="text/css" />
    <meta http-equiv="content-language" content="en" />
    <meta http-equiv="imagetoolbar" content="no" />
    <meta name="resource-type" content="document" />
    <meta name="distribution" content="global" />
    <meta name="copyright" content="2000, 2002, 2005, 2007 phpBB Group" />
    <meta name="keywords" content="" />
    <meta name="description" content="" />
    <meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7; IE=EmulateIE9" />';

$regex = '/<meta.*\/>/';
preg_match_all($regex, $header, $matches);
$header = preg_replace($regex, $meta, $header);

echo "<pre>";
echo print_r($matches); 
echo "</pre>";

$header中的元标记应替换为$meta中的元标记。 $header中有3个元标记,因此它将替换3次,除非我将所有元标记放在彼此旁边。无论有多少标签,我只想更换一次。

我使用的正则表达式如下:

$regex = '/<meta.*\/>/';

1 个答案:

答案 0 :(得分:1)

如果您要将所有<meta...>标记替换为$meta的内容,则必须将标记作为单独步骤删除,然后在特定位置插入替换标记。< / p>

此解决方案要求标签格式正确。请注意,它尚未经过测试。

$header = preg_replace(/<meta\s.*?\/>/isg, "", $header);
$header = preg_replace(/(<\/title>[\s\n]*)/is, "$1$meta", $header);