preg_replace(),以及随之而来的缩写?

时间:2009-06-26 14:16:42

标签: php regex api twitter

我最近一直在使用一个简单的PHP API,并且遇到了这个代码,以使@username与twitter.com/username相关联。不幸的是,这段代码创建了它,因此@username链接到http://twitter.com/@username,导致错误。这段代码有很多部分我不明白,比如^ \ v和其他(见下文)。任何人都可以给我一个解释他们的意思吗?

$ret = preg_replace('/(^|[^\w])(@[\d\w\-]+)/', '\\1<a href="http://twitter.com/$2">$2</a>' ,$ret);

3 个答案:

答案 0 :(得分:2)

简单的一个:

$ret = preg_replace('/(^|[^\w])@([\d\w\-]+)/', '\\1<a href="http://twitter.com/$2">@$2</a>' ,$ret);

唯一的区别是@被移出捕获组,这意味着必须手动将其添加到链接中的输出。

此外,\ w包含数字,因此\ d是多余的。所以你可以简单地说:

$ret = preg_replace('/^|([^\w])@([\w\-]+)/', '\\1<a href="http://twitter.com/$2">@$2</a>' ,$ret);

答案 1 :(得分:1)

删除@,使用:

$ret = preg_replace('/(^|[^\w])@([\d\w\-]+)/', '\\1<a href="http://twitter.com/$2">$2</a>' ,$ret);

这会将@移动到第二个捕获组之外

另请参阅http://www.regular-expressions.info/以获取有关正则表达式(多种语言)的一些优秀信息

答案 2 :(得分:1)

嗯,要回答你的问题,^\v表示第一个字符必须是“垂直空格”字符。基本上它意味着“从一个空白的新行开始”

编辑:看起来你实际上更常见的是^\w,这意味着“必须以'字'字符开头。”那就是一个字母或数字。

您可以找出所有这些字符代表here

的内容