正则表达式匹配和替换字符串

时间:2011-11-19 09:51:12

标签: php regex

我想匹配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>

我该怎么做?获得答案

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:2)

您可以使用preg_replace。由于你有正则表达式,你只需要构造一个$替换模式。在其中使用$1$2以及$3占位符,其中每个占位符都与(...)捕获组相对应。

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

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

如果您确实需要以某种方式将推特名称转换为更复杂的网址,那么您可能希望改为使用preg_replace_callback