日期:2014-05-17  浏览次数:20418 次

简单正则表达式替换问题
从其它地方看到一个题目:

在 HTML 语言中,页面头部的 meta 标记可以用来输出文件的编码格式,以下是一个标准的 meta 语句
<META http-equiv='Content-Type' content='text/html; charset=gbk'>
请使用 PHP 语言写一个函数,把一个标准 HTML 页面中的类似 meta 标记中的 charset 部分值改为 big5
请注意:
1. 需要处理完整的 html 页面,即不光此 meta 语句
2. 忽略大小写
3. ' 和 " 在此处是可以互换的
4. 'Content-Type' 两侧的引号是可以忽略的,但 'text/html; charset=gbk' 两侧的不行
5. 注意处理多余空格

首先想到的是正则表达式替换,如下所示:
PHP code

$content = "ab<meta http-equiv='Content-Type' content='text/html; charset=gbk'>b";//模拟html代码中的<meta>

//preg_match('/<meta([^>]+)charset=[a-zA-Z-0-9]+([\'"])>/i',$content,$matches);
//var_dump($matches);//此句说明可以匹配到

preg_replace('/<meta([^>]+)charset=[a-zA-Z-0-9]+([\'"])>/i',"<meta\\1charset=big5\\2>",$content);
echo $content;  //输出abb,也就是说替换不成功,将匹配部分替换为了空



以上正则替换,哪里有问题,求指点!

------解决方案--------------------
没有问题
PHP code
$content = preg_replace('/<meta([^>]+)charset=[a-zA-Z-0-9]+([\'"])>/i',"<meta\\1charset=big5\\2>",$content);
echo '<pre>';
echo $content;