我最近一直在使用一个简单的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);
答案 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
的内容