PHP用preg_replace()和正则表达式将文本中的@example微博昵称替换为超链接

由于是模仿新浪微博做的树洞代发模板UI

所以在主页直接用 foreach 把树洞的微博输出来了

但是有时候有些人发送的微博@有其他人或者有http连接、热门话题等

如何在页面输出之前正则替换掉这些字符,使它们成为超链接呢?

以前因为还没怎么接触过正则表达式,所以也懒得去想、去做、

今天刚好在论坛看到一位朋友提出了这个问题

然后根据他给的一些想法和思路。。。整理了一些资料出来,希望对大家有用

——————————————————————分割线———————————————————————–

①将文本中@后面的字符转换为超链接

Example:@example ,我真的好喜欢你   (貌似树洞挺常出现这样的字眼的,拿来做example)

正则替换后变成@example ,我真的好喜欢你

实现代码如下:

1
2
3
4
5
<?php
$t="@example ,我真的好喜欢你";
$t = preg_replace( "/ *@([\x{4e00}-\x{9fa5}A-Za-z0-9_-]*) ?/u", " <a href=\"http://weibo.com/n/\\1\" target=\"_blank\">@\\1</a> ", $t);
echo $t;
?> 

②将文本中#example# (热门话题)替换为超链接

Example:#韩寒VS方舟子#

正则替换后变成 #韩寒VS方舟子# 

实现代码如下:

1
2
3
4
5
<?php
$k="#韩寒VS方舟子#";
$k = preg_replace( "/ *#([\x{4e00}-\x{9fa5}A-Za-z0-9_-]*) ?/u", " <a href=\"http://weibo.com/k/\\1\" target=\"_blank\">#\\1</a> ", $k);
echo $k;
?>  

③将文本中http:// 开头的URL正则替换为超链接

这个刚好在常用的正则表达式函数库里面有实例,我就直接贴上来咯

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<?php

function url2html($text)
{
//匹配一个URL,直到出现空白为止    
preg_match_all("/http:\/\/?[^\s]+/i", $text, $links);
//设置页面显示URL地址的长度    
$max_size = 40;
foreach($links[0] as $link_url)
{
//计算URL的长度。如果超过$max_size的设置,则缩短。    
$len = strlen($link_url);
if($len > $max_size)
{
$link_text = substr($link_url, 0, $max_size)."...";
} else {
$link_text = $link_url;
}
//生成HTML文字    
$text = str_replace($link_url,"<a href='$link_url'>$link_text</a>",$text);
}
return $text;
}
//运行实例    

$str = "这是一个包含多个URL链接地址的多行文字。欢迎访问http://belinlove.sinaapp.com";
print url2html($str);
/*输出结果 
这是一个包含多个URL链接地址的多行文字。欢迎访问  
<a href='http://belinlove.sinaapp.com'>   
http://belinlove.sinaapp.com</a>   
*/
?>  

上面总结的一些正则表达式替换实例,希望对奋战在SAE和新浪API的朋友有小小帮助

Comments