Php将用指向twitter帐户的链接替换@username

Php将用指向twitter帐户的链接替换@username,php,regex,Php,Regex,我想这与正则表达式有些关系,但它本身就是一门艺术——我需要一些帮助 当我们显示一个故事时,我们将所有文本存储在一个变量中,比如$story 我想做的是做一个str_替换(我想这就是我需要的),它说的是这样的“如果文本包含@something,然后将其转换为类似的链接-但只有在@symbol之前没有任何内容时才这样做”(不包括电子邮件地址) 此外,如果“某物”后面有空格或标点符号,我们需要停止它。所以那是什么。不会变成 关于如何使这项工作成功,有什么建议吗?积极的回顾可以做到这一点: preg_r

我想这与正则表达式有些关系,但它本身就是一门艺术——我需要一些帮助

当我们显示一个故事时,我们将所有文本存储在一个变量中,比如$story

我想做的是做一个str_替换(我想这就是我需要的),它说的是这样的“如果文本包含@something,然后将其转换为类似
的链接-但只有在@symbol之前没有任何内容时才这样做”(不包括电子邮件地址)

此外,如果“某物”后面有空格或标点符号,我们需要停止它。所以那是什么。不会变成


关于如何使这项工作成功,有什么建议吗?

积极的回顾可以做到这一点:

preg_replace('/(?<=\s)@(.*?)/', '<a href="....com/$1">@$1</a>')
preg_替换('/(?)?

它只匹配twitter名称,但前提是之前没有空格或没有空格。

好吧,你需要
[a-z0-9.-]
而不是正则表达式中的
,对吧?因为twitter名称不能有特殊字符或空格(你的正则表达式现在就可以选择。事实上,它会一直吃到字符串末尾)如果twitter名称的开头没有空格,则会失败。这是查找“@”符号并创建链接,但在URL或显示内容中不使用@后面的文本。因此我看到的是
@scatteredbomb,你说得对。
(.*)
如果可能,将不匹配任何内容。由于后面没有任何内容,因此始终是这样。第二个参数(到第二个示例)应该是
。嘿,我正在学习正则表达式,这个例子对我非常有用。我几乎了解了第一个例子的所有内容,但不明白第一个模式末尾的/I是什么意思。有人想解释一下吗?@0al0:结尾的
I
使正则表达式不区分大小写。
$input = preg_replace('/(^|\s)@([a-z0-9_]+)/i',
                      '$1<a href="http://www.twitter.com/$2">@$2</a>',
                       $input);
$input = preg_replace('/(?<=^|\s)@([a-z0-9_]+)/i',
                      '<a href="http://www.twitter.com/$1">@$1</a>',
                      $input);