Php用Twitter帐户链接替换@username

时间:2011-01-22 04:23:35

标签: php regex

我认为这与正则表达式有关,但它本身就是一门艺术 - 我需要一些帮助。

当我们展示一个故事时,我们将所有文本存储在一个可变的文件中 - 比方说$ story。

我想要的是做一个str_replace(我认为这就是我需要的),这样的话说“如果文本包含@something然后把它变成像<a href="http://www.twitter.com/something">@something</a>这样的链接 - 但只做这个如果在@符号之前没有任何内容“(以排除电子邮件地址)

另外,如果后面有空格或标点符号,我们需要停止'某事'。所以@something。不会变成<a href="http://www.twitter.com/something.">@something.</a>

有关如何使这项工作的任何建议?

2 个答案:

答案 0 :(得分:13)

$input = preg_replace('/(^|\s)@([a-z0-9_]+)/i',
                      '$1<a href="http://www.twitter.com/$2">@$2</a>',
                       $input);

See it

它匹配一个@,前面有空格或什么都没有(当它在开头时)。

它也可以使用正面lookbehind缩短为:

$input = preg_replace('/(?<=^|\s)@([a-z0-9_]+)/i',
                      '<a href="http://www.twitter.com/$1">@$1</a>',
                      $input);

仅匹配推特名称,但仅限于此前有空格或没有空格。

答案 1 :(得分:6)

积极的外观可以解决这个问题:

preg_replace('/(?<=\s)@(.*?)/', '<a href="....com/$1">@$1</a>')
离开我的头顶。 “如果有一个@之前有空格的东西,那么在@之后接下来的任何内容并执行html标记包装”。