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 PADS Logic 原理图
  • ¥15 PADS Logic 图标
  • ¥15 电脑和power bi环境都是英文如何将日期层次结构转换成英文
  • ¥20 气象站点数据求取中~
  • ¥15 如何获取APP内弹出的网址链接
  • ¥15 wifi 图标不见了 不知道怎么办 上不了网 变成小地球了
  • ¥50 STM32单片机传感器读取错误
  • ¥15 (关键词-阻抗匹配,HFSS,RFID标签天线)
  • ¥15 机器人轨迹规划相关问题
  • ¥15 word样式右侧翻页键消失