php正则的高级应用:
(1)把a标签中的内容加一个新的 span标签。
$str = preg_replace("/()(.*?)(<\/a>)/", '\1\2\3', $str);
其中用了三个子模式(每个圆括号中内容为一个子模式),第一个是链接开始标签,第二个是链接文本,第三个是
其中用了三个子模式(每个圆括号中内容为一个子模式),第一个是链接开始标签,第二个是链接文本,第三个是
(2)
获取任意的字符串$string中的所有链接地址($string可以是从一个HTML页面文件直接读取出来的字符串),结果保存在一个数组中返回.该函数自动把电子邮件地址排除在外,而且返回的数组中不会有重复元素.
function GetAllLink($string)
{
$string = str_replace("\r","",$string);
$string = str_replace("\n","",$string);
$regex[url] = "((http|https|ftp|telnet|news):\/\/)?([a-z0-9_\-\/\.]+\.[][a-z0-9:;&#@=_~%\?\/\.\,\+\-]+)";
$regex[email] = "([a-z0-9_\-]+)@([a-z0-9_\-]+\.[a-z0-9\-\._\-]+)";
//去掉标签之间的文字
$string = eregi_replace(">[^<>]+<","><", $string);
//去掉JAVASCRIPT代码
$string = eregi_replace("<!--.*//-->","", $string);
//去掉非<a>的HTML标签
$string = eregi_replace("<[^a][^<>]*>","", $string);
//去掉EMAIL链接
$string = eregi_replace("<a([ ]+)href=([\"']*)mailto:($regex[email])([\"']*)[^>]*>","", $string);
//替换需要的网页链接
$string = eregi_replace("<a([ ]+)href=([\"']*)($regex[url])([\"']*)[^>]*>","\\3\t", $string);
$output[0] = strtok($string, "\t");
while(($temp = strtok("\t")))
{
if($temp && !in_array($temp, $output))
$output[++$i] = $temp;
}
return $output;
}
(3)删除html代码中a标签并保留标签内容的方法
HTML代码如:
<div>欢迎访问脚本之家<a href=http://www.jb51.net>www.jb51.net</a></div>
要求正则删除a标签,同时保留a标签内容,如下:
<div>欢迎访问脚本之家www.jb51.net</div>
二、解决方法:
$str = "<div>欢迎访问脚本之家<a href=http://www.jb51.net>www.jb51.net</a></div>";
$str = htmlspecialchars_decode($str);
$str = preg_replace("/<a[^>]*>(.*?)<\/a>/is", "$1", $str);
echo $str;
运行结果为:
<div>欢迎访问脚本之家www.jb51.net</div>