尝试用锚标记替换所有出现的@mention,到目前为止,我有:
$comment = preg_replace('/@([^@ ])? /', '<a href="/$1">@$1</a> ', $comment);
Run Code Online (Sandbox Code Playgroud)
采取以下示例字符串:
"@name kdfjd fkjd as@name @ lkjlkj @name"
Run Code Online (Sandbox Code Playgroud)
到目前为止,一切都很好,但我想忽略那个单一的"@"符号.我尝试在"[^ @]"之后使用"+"和"{2,}",我认为这会强制执行最少量的匹配,但它不起作用.
我喜欢 Petah 的答案,但我稍微调整了一下
preg_replace('/(^|\s)@([\w.]+)/', '$1<a href="/users/$2">@$2</a>', $text);
Run Code Online (Sandbox Code Playgroud)
主要区别是:
@不包括仅用于显示,不应出现在 URL 中.字符(注意:\w包括下划线)$1在开头添加以保留空格正则表达式
(^|\s)(@\w+)
Run Code Online (Sandbox Code Playgroud)
可能是你追求的.
它基本上意味着,行的开头或空格,然后是@符号后跟1个或多个单词字符.
例如
preg_match_all('/(^|\s)(@\w+)/', '@name1 kdfjd fkjd as@name2 @ lkjlkj @name3', $result);
var_dump($result[2]);
Run Code Online (Sandbox Code Playgroud)
给你
Array
(
[0] => @name1
[1] => @name3
)
Run Code Online (Sandbox Code Playgroud)