PHP Regex将冒号前的文本转换为链接

时间:2011-06-30 18:41:13

标签: php regex

我需要找到第一次出现冒号':'并在此之前取完整字符串并将其附加到链接。

e.g。

username: @twitter nice site! RT www.google.com : visited!

需要转换为:

<a href="http://twitter.com/username">username</a>: nice site! RT www.google.com : visited!

我已经有了以下正则表达式,将字符串@twitter转换为可点击的网址:

E.g。

$description = preg_replace("/@(\w+)/", "<a href=\"http://www.twitter.com/\\1\" target=\"_blank\">@\\1</a>", $description);

任何想法:)

5 个答案:

答案 0 :(得分:3)

我使用字符串操作,而不是正则表达式,使用strstrsubstrstrlen

$username = strstr($description, ':', true);
$description = '<a href="http://twitter.com/' . $username . '">' . $username . '</a>'
             . substr($description, strlen($username));

答案 1 :(得分:1)

$regEx = "/^([^:\s]*)(.*?:)/";
$replacement = "<a href=\"http://www.twitter.com/\1\" target=\"_blank\">\1</a>\2";

答案 2 :(得分:0)

我没有测试过代码,但它应该按原样运行。基本上你也需要在@twitter之后捕获。

$description = preg_replace("%([^:]+): @twitter (.+)%i", 
    "<a href=\"http://www.twitter.com/\\1\" target=\"_blank\">@\\1</a>: \\2", 
    $description);

答案 3 :(得分:0)

以下内容应该有效 -

$description = preg_replace("/^(.+?):\s@twitter\s(.+?)$/", "<a href=\"http://www.twitter.com/\\1\" target=\"_blank\">@\\1</a>: \\2", $description);

答案 4 :(得分:0)

直接回答您的问题:

$string = preg_replace('/^(.*?):/', '<a href="http://twitter.com/$1">$1</a>:', $string);

但我认为您正在解析Twitter RSS或类似的东西。所以你可以使用/^(\w+)/