猿问

如何从laravel中的字符串中提取所有#Tags和用户标签?

我有一个输入字段,其中用户名标签如@abd123,@abc1和一些主题标签如#CurrentNews,#NewLife在同一输入字段上。


在这里,我的工作是捕获所有以 @ 和 # 开头的标记名称,并放在单独的数组中以查看它们的数据库表。所以这对我来说非常复杂。所以请告诉我最简单的解决方案。


这是在我为此使用explode()方法之前。但这不是一个好主意。


我从请求中得到的价值


$allTags =  @abc1,@abvc321, #NewAge , #CurrentNews

它应该是在处理之后。


$userTag = ["@abc1","@abvc321"];

$topicTag = ["#NewAge ","#CurrentNews"];


拉莫斯之舞
浏览 107回答 2
2回答

宝慕林4294392

调整从PHP 中的字符串中提取 Twitter 主题标签的答案以捕获用户标签,这在同一个正则表达式中使用两者来生成 2 个列表。过滤器 ( array_filter()) 用于整理数组(当一个包含用户标签时,另一个将为空)...$string = '@abc1 xxx,@abvc321, #NewAge , #CurrentNews';preg_match_all("/(#\\w+)|(@\\w+)/", $string, $matches);$topicTag = array_filter($matches[1]);$userTag = array_filter($matches[2]);print_r($userTag);print_r($topicTag);给...Array(    [0] => @abc1    [1] => @abvc321)Array(    [2] => #NewAge    [3] => #CurrentNews)

慕田峪4524236

亲爱的Nigel Ren,我对您的解决方案几乎没有改动。因为$userTag是对象格式。所以它的数据类型会改变。这不会影响foreach。但我尝试将两者都制成数组格式。    $string = $req->user_tags;    preg_match_all("/(#\\w+)|(@\\w+)/", $string, $matches);    $topicTag = array_values(array_filter($matches[1]));    $userTag = array_values(array_filter($matches[2]));在此之后我的结果 [   [     "@pankaj",     "@pawan"   ], [   "#tag",   "#tag2",   "#tage3" ]]
随时随地看视频慕课网APP
我要回答