带有链接的preg_replace()

时间:2014-08-16 23:02:48

标签: php regex preg-replace

我正在尝试集成像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?如何,我如何获得被替换的内容?这种情况下的$needlemark

无论如何我可以像preg_match()那样得到它吗?我将通过preg_match()获取它。

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

1 个答案:

答案 0 :(得分:2)

documentation明确指出:

  

替换 可能包含\ n或(从PHP 4.0.4开始)$ n形式的引用,后一种形式是首选形式。每个这样的引用将被第n个带括号的模式捕获的文本替换。 n可以是0到99,\ 0或$ 0是指整个模式匹配的文本。打开括号从左到右计数(从1开始)以获得捕获子模式的编号。要替换使用反斜杠,必须加倍(&#34; \\&#34; PHP字符串)。

正则表达式替换中的

$n是对第n个capturing group匹配的内容的引用。

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

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