用正则表达式匹配艾特@,并且排除邮箱

有这样一个需求,用户通过 @数字 实现艾特功能,通过正则表达式实现。并且要排除诸如@163.com的邮箱。

直接放PHP代码:

$preg = '#(@|@)([1-9]\d*(?!(\.|\d)))#i';
preg_match_all($preg, $content, $match);

for ($i = 0; !empty($match[1][$i]); $i++) {
    $user_id = $match[1][$i];//取到文本中的@后面的数字
    //code
    $content = preg_replace($preg, '@' . $user_name . ' ', $content,  1);//将 @数字 替换为 @名字 显示。
}

正则表达式的思路:#(@|@)([1-9]\d*(?!(\.|\d)))#i
(@|@)表示匹配全角和半角两种艾特符号
[1-9]\d*表示匹配之后的数字
(?!(\.|\d))表示最后一位不为[.或数字],排除邮箱。可以防止@163.com匹配@16或@163
#正则表达式#i修饰符,表示不区分大小写

欢迎来到Yari的网站:yar2001 » 用正则表达式匹配艾特@,并且排除邮箱