最近大伙都比较热衷于玩腾讯微博,喜欢新鲜事物的我(喵了个咪)也不例外,不过玩的同时,喜欢想这个是怎么实现的那个是怎么实现的,所以有了这篇文章。
大家都知道,一段文字:
经过广播之后,会变成大概这个样子:
但这整个过程是怎么实现的呢?
正则替换!对了,就是利用了正则替换。
但是简单的正则替换还是不能完全完成这一过程,需要更复杂一些的正则\e修正模式支持。
花了一点点时间写了一个演示:
<?php
$accounts = array(
'admin'=>'超级管理员',
'deeka'=>'大笨',
);
function showaccount($s=''){
global $accounts;
if($accounts[$s])
return "<a href='http://www.yourdomain.com/{$s}'>{$accounts[$s]}</a>";
else
return $s;
}
function showurl($s=''){
$md5 = md5($s);
$url = "http://www.yourdomain.com/url/{$md5}";
return "<a href='{$url}' title='{$s}'>{$url}</a>";
}
function showtopic($s=''){
return "<a href='http://www.yourdomain.com/t/{$s}'>#{$s}#</a>";
}
$s = "大家说@deeka和@admin是不是#牛人#, 个人博客http://www.hdj.me。";
$p = array(
"/(http\s?:\/\/[\w+\.\-\_]+)/e",
"/@(\w+)/e",
"/#(.*?)#/e",
);
$r = array(
"showurl('\\1')",
"showaccount('\\1')",
"showtopic('\\1')",
);
$s = preg_replace($p, $r, $s);
var_dump($s);
?>
大家都知道,一段文字:
大家说@deeka和@admin是不是#牛人#, 个人博客http://www.hdj.me?
经过广播之后,会变成大概这个样子:
大家说<a href='http://www.yourdomain.com/deeka'>大笨</a>和<a href='http://www.yourdomain.com/admin'>超级管理员</a>是不是<a href='http://www.yourdomain.com/t/牛人'>#牛人#</a>, 个人博客<a href='http://www.yourdomain.com/url/4f6beca52ee37c537d1fa85bc374679f' title='http://www.hdj.me'>http://www.yourdomain.com/url/4f6beca52ee37c537d1fa85bc374679f</a>。
但这整个过程是怎么实现的呢?
正则替换!对了,就是利用了正则替换。
但是简单的正则替换还是不能完全完成这一过程,需要更复杂一些的正则\e修正模式支持。
花了一点点时间写了一个演示:
<?php
$accounts = array(
'admin'=>'超级管理员',
'deeka'=>'大笨',
);
function showaccount($s=''){
global $accounts;
if($accounts[$s])
return "<a href='http://www.yourdomain.com/{$s}'>{$accounts[$s]}</a>";
else
return $s;
}
function showurl($s=''){
$md5 = md5($s);
$url = "http://www.yourdomain.com/url/{$md5}";
return "<a href='{$url}' title='{$s}'>{$url}</a>";
}
function showtopic($s=''){
return "<a href='http://www.yourdomain.com/t/{$s}'>#{$s}#</a>";
}
$s = "大家说@deeka和@admin是不是#牛人#, 个人博客http://www.hdj.me。";
$p = array(
"/(http\s?:\/\/[\w+\.\-\_]+)/e",
"/@(\w+)/e",
"/#(.*?)#/e",
);
$r = array(
"showurl('\\1')",
"showaccount('\\1')",
"showtopic('\\1')",
);
$s = preg_replace($p, $r, $s);
var_dump($s);
?>




