我认为这与正则表达式有关,但它是一门艺术 - 我需要一些帮助.
当我们展示一个故事时,我们将所有文本存储在一个可变的文件中 - 比方说$ 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)
哪个只匹配推特名称,但只有在此之前有空格或没有空格.
积极的外观可以做到这一点:
preg_replace('/(?<=\s)@(.*?)/', '<a href="....com/$1">@$1</a>')
Run Code Online (Sandbox Code Playgroud)
脱离我的头顶."如果有一个@之前是空格的东西,那么在@之后接下来的任何内容并执行html标记包装".