我怎样才能获得这个preg_replace替换?

时间:2014-12-03 05:35:03

标签: php

我试图用#hashtags获取一个字符串并将它们转换为数组键! 例如:

string =" hello#world&#34 ;;

我想替换为"你好$ line [' world']";

我这样做了:

$query = mysql_query($sql);
while($line = mysql_fetch_assoc($query)) {
    $code = preg_replace("/(#(\w+))/", $line['$1'], $string);
    echo $code;
}

但是我收到了这样的警告:"未定义的索引:$ 1" 显然只有echo打印"你好"

但是,如果我直接放置一个有效的$ line键,它会显示其内容。像这样:

$query = mysql_query($sql);
while($line = mysql_fetch_assoc($query)) {
    $code = preg_replace("/(#(\w+))/", $line[name], $string);
    echo $code;
}

它告诉我"你好nameFromDatabase"对于每一行数据库...

如何在preg_replace上设置此$ line [XXX]以获取位于#hashtag替换位置的名称?

1 个答案:

答案 0 :(得分:2)

你不能使用preg_replace。当你调用该函数时,你传递两个参数:

  1. "/(#(\w+))/"
  2. $line['$1']
  3. 当preg正在进行更换时,已经太晚了。第二个参数已被评估,preg_method无法返回并重新调整参数以达到您想要的效果。

    preg_replace_callback可以做你想做的事情:

    while($line = mysql_fetch_assoc($query)) {
        $code = preg_replace_callback(
           "/(#(\w+))/",
           function($matches) use ($line) {
              return $line[$matches[1]];
           },
           $string
        );
        echo $code;
    }