You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP正则需求:匹配不在链接内的@用户(含开头@用户)

PHP正则匹配@用户(排除链接内的@)

需求匹配规则

需要匹配符合以下两个条件的@用户:

  • 不在http/https链接内部
  • 位于字符串开头或空白字符之后

解决正则表达式

$regex = '/(?:^|\s)(?<!https?:\/\/\S*)@([a-zA-Z0-9-_]+)/';

正则各部分解释

  • (?:^|\s):匹配字符串开头或空白字符(非捕获组,仅用于定位,不捕获该部分内容)
  • (?<!https?:\/\/\S*):负向回顾断言,确保当前@符号的前面不是http/https链接的一部分(排除链接内的@)
  • @([a-zA-Z0-9-_]+):匹配@符号及后续的用户ID,将用户ID捕获到分组1中

替换示例代码

// 原始字符串
$content = "@user1  sent a link http://localhost/@dummy/video/7079513184146607365  to @user3";

// 正则替换,将@用户转为跳转链接
$processedContent = preg_replace(
    '/(?:^|\s)(?<!https?:\/\/\S*)@([a-zA-Z0-9-_]+)/',
    '$0<a href="/profile/$1">@$1</a>',
    $content
);

echo $processedContent;

效果说明

运行上述代码后,会将字符串中的@user1和@user3替换为指定链接,而链接内部的@dummy会被自动排除,不会被匹配替换。

扩展调整

  • 如果需要支持其他协议的链接(如ftp://),可将正则中的https?:\/\/修改为(https?:\/\/|ftp:\/\/)
  • 如果用户ID允许其他字符(如.),可将字符范围[a-zA-Z0-9-_]调整为[a-zA-Z0-9-_.]

内容的提问来源于stack exchange,提问作者joe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 04:45:34