laravel - preg_match_all 提到用户@Laravel
问题描述
我想在帖子中找到提到的用户并将其保存在表格中。这里是所有输入的用户名,这些用户名写在@符号后面的帖子中,并在“用户”表中找到,ID 由用户存储。不幸的是,我找不到任何用户,因此找不到用户 ID。如何从用户那里找到 ID?
$msg = I am a post and mention @username1 and @username2
preg_match_all('/@(\w+)/', $msg, $mentionedUsers);
foreach ($mentionedUsers[0] as $mentionedUser) {
$foundUser = User::find($mentionedUser);
if ($foundUser) {
$foundUserId = $foundUser->id;
}
$mentionedUser_save = new Mentioned_post_user;
$mentionedUser_save->user_id_lead = Auth::user()->id;
$mentionedUser_save->user_id = $foundUserId;
$mentionedUser_save->post_id = $post->id;
$mentionedUser_save->save();
}
解决方案
这$mentionedUsers[0]
是一个完整匹配的数组,字符串以@
1+ 字字符开头。用户名是没有的部分@
,被捕获到第 1 组中。
因此,您需要使用
foreach ($mentionedUsers[1] as $mentionedUser)
^
@
然后,您将拥有前面没有的用户 ID 。
此外,如果您想避免匹配的电子邮件,您可以在正则表达式\B
之前添加@
:
'/\B@(\w+)/'
然后,@
只有在前面没有单词 char 的情况下 char 才会被匹配。
推荐阅读
- jquery - 如何在jquery中使用变量访问id
- listview - 如何使用 SliverAppbar 创建浮动按钮并在 Flutter 中添加 ListView?
- kubernetes - 跨本地和公共云的混合 K8S
- nas - Synology NAS 磁盘已满,无法连接
- java - org.springframework.orm.jpa.JpaSystemException:没有 JDBC 类型的方言映射:-9
- wso2 - WSO2 LDAP 身份验证问题
- safari-app-extension - Safari App Extensions 问题,可能是授权
- ruby-on-rails - Rails ActiveStorage rails_blob_path 生成无效 url,启动时缺少 /rails
- custom-keyboard - MSKLC:如何将国家与自定义键盘布局相关联
- jquery - 单击其他活动菜单后如何使手风琴菜单向上滑动?