繁体   English   中英

带链接的preg_replace()

[英]preg_replace() with a link

我正在尝试集成一个类似Twitter的答复系统,您可以在其中使用“ @usernameHere”。 我需要用指向该用户个人资料的链接替换@usernameHere。 我可以只使用preg_replace()吗? 这样的东西...?

$pattern = '/(?<![\w@])@([\w@]+(?:[.!][\w@]+)*)/';
$replacement = '<a href="profile?user='.$needle.'">Username</a>';
$string = "@mark, hey wanna hang?";
preg_replace($pattern, $replacement, $string);

我将如何获得$needle 在这种情况下,我将如何获取替换内容? 这种情况下的$needle会被mark

无论如何我可以像preg_match()一样得到它吗? 这是我将如何使用preg_match()获得它。

preg_match('/(?<![\w@])@([\w@]+(?:[.!][\w@]+)*)/', $comment, $matches);
$matches[1] = $needle;

文档明确指出:

替换可能包含\\ n或(自PHP 4.0.4起)$ n形式的引用,后一种形式是首选形式。 每个此类引用都将被第n个括号模式捕获的文本替换。 n可以是0到99,\\ 0或$ 0表示整个模式匹配的文本 从左到右(从1开始)对左括号进行计数,以获得捕获子模式的编号。 要在替换中使用反斜杠,必须将其加倍(“ \\\\” PHP字符串)。

$n在正则表达式替换中是对第n个捕获组匹配的内容的引用。

因此,您将在此处使用$1来引用第一个捕获组所匹配的内容。

$replacement = '<a href="profile?user=$1">$1</a>';

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM