我认为这与正则表达式有关,但它本身就是一门艺术 - 我需要一些帮助。
当我们展示一个故事时,我们将所有文本存储在一个可变的文件中 - 比方说$ story。
我想要的是做一个str_replace(我认为这就是我需要的),这样的话说“如果文本包含@something然后把它变成像<a href="http://www.twitter.com/something">@something</a>
这样的链接 - 但只做这个如果在@符号之前没有任何内容“(以排除电子邮件地址)
另外,如果后面有空格或标点符号,我们需要停止'某事'。所以@something。不会变成<a href="http://www.twitter.com/something.">@something.</a>
有关如何使这项工作的任何建议?
答案 0 :(得分:13)
$input = preg_replace('/(^|\s)@([a-z0-9_]+)/i',
'$1<a href="http://www.twitter.com/$2">@$2</a>',
$input);
它匹配一个@
,前面有空格或什么都没有(当它在开头时)。
它也可以使用正面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标记包装”。