我正在尝试集成像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;
答案 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>';