2011-11-19 523 views
2

我想匹配twitter用户名并用字符串替换它。这是用PHP正则表达式匹配并替换字符串

这是正则表达式我有

/(^|[^a-z0-9_])[@@]([a-z0-9_]{1,20})([@@\xC0-\xD6\xD8-\xF6\xF8-\xFF]?)/iu 

我有一个像

RT @omglol I am hungry @lolomg bla 

字符串我想用html标记有取代每名状

<a href="http://lol.com">@omglol</a> 

我该怎么做? Thaks的答案

+0

你可以发布你也试过的代码吗? –

+0

为什么在这个问题中有一个苗条和肥胖@? –

+0

@BillyMoon有人用@和@发送推文我想匹配他们。 – Blank

回答

4
$s = "RT @omglol I am hungry @lolomg bla"; 
$p = "/(@\w+)/"; 
$r = '<a href="http://lol.com">$1</a>'; 
print preg_replace($p, $r, $s); 

=> RT <a href="http://lol.com">@omglol</a> I am hungry <a href="http://lol.com">@lolomg</a> bla 
2

你会使用preg_replace。既然你有正则表达式,你只需要构造一个$替换模式。在其中使用$1$2$3占位符,其中每个对应于(...)捕获组。

$text = preg_replace(YOUR_REGEX, "$1<a href=$2>:)$2</a>$3", $text); 

你的正则表达式不是很聪明,但可能适用于此。您当然也可以为href=添加一个基本的URL /前缀。

如果您确实需要以某种方式将twitter名称转换为更复杂的URL,那么您可能需要使用preg_replace_callback

+0

谢谢! ! ! ! ! – Blank