Php用Twitter帐户链接替换@username

And*_*las 8 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>

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

cod*_*ict 13

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

看见

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

它也可以使用积极的lookbehind缩短为:

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

哪个只匹配推特名称,但只有在此之前有空格或没有空格.


Mar*_*c B 6

积极的外观可以做到这一点:

preg_replace('/(?<=\s)@(.*?)/', '<a href="....com/$1">@$1</a>')
Run Code Online (Sandbox Code Playgroud)

脱离我的头顶."如果有一个@之前是空格的东西,那么在@之后接下来的任何内容并执行html标记包装".