dqfkd82886 2018-04-16 20:22
浏览 40
已采纳

转换数组中替换的字符串

I have the following code:

<?php
$text = 'Hey @Mathew, have u talked with @Jhon today?';
    $text = preg_replace('/(^|\s)@([A-Za-z0-9]*)/', '\1<a href="profile.php?user=\\2">@\\2</a>',$text);
?>

And my goal is notify the user was quoted. To do that, I thought: I put all the replaced strings in a array and pick only the name; using the example above, and following the thinking, I have this result:

['Mathew', 'Jhon']

So, how can I have the last result?

  • 写回答

3条回答 默认 最新

  • doujiling4377 2018-04-16 20:33
    关注

    You may actually collect matches while performing a regex-based search and replace if you use preg_replace_callback:

    $text = 'Hey @Mathew, have u talked with @Jhon today?';
    $names = [];
    $text = preg_replace_callback('/(^|\s)@([A-Za-z0-9]*)/', function($m) use (&$names) {
            $names[] = $m[2];
            return $m[1] . '<a href="profile.php?user=' . $m[2] . '">@' . $m[2] . '</a>';
        },$text);
    echo "$text
    ";
    print_r($names);
    

    See the PHP demo

    Output:

    Hey <a href="profile.php?user=Mathew">@Mathew</a>, have u talked with <a href="profile.php?user=Jhon">@Jhon</a> today?
    Array
    (
        [0] => Mathew
        [1] => Jhon
    )
    

    Note the array variable for the matches is passed to the anonymous function with the use (&$names) syntax. The $m is a match object containing the whole match in the first item and captures in the subsequent items.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 如何让企业微信机器人实现消息汇总整合
  • ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
  • ¥15 如何用Python爬取各高校教师公开的教育和工作经历
  • ¥15 TLE9879QXA40 电机驱动
  • ¥20 对于工程问题的非线性数学模型进行线性化
  • ¥15 Mirare PLUS 进行密钥认证?(详解)
  • ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证
  • ¥20 想用ollama做一个自己的AI数据库
  • ¥15 关于qualoth编辑及缝合服装领子的问题解决方案探寻
  • ¥15 请问怎么才能复现这样的图呀