使用preg_replace时从关键字中删除$

时间:2015-05-16 06:56:12

标签: php

当用户在我的聊天应用程序中添加$ keyword时,我想删除$符号。 $ keyword不是变量,它是一个包含$来触发关键字的字符串。

这是我的代码:

<?php

class Chat extends DB {

public function get_Messages() {

    $rows = DB::getInstance()->query("SELECT * FROM ( SELECT user,message,TS FROM chat ORDER BY TS DESC LIMIT 50 ) sub ORDER BY TS ASC");

    foreach ($rows->results() as $row) {

        $str=$row->message;
        $stocklist = '$AAPL'; << doenst convert to link when containing $

        echo $row->TS . '<br/><strong>' .$row->user . '</strong> says: <br/>';
        echo preg_replace("/(".$stocklist.")/s","<a href='http://finance.yahoo.com/q?s=$1'>$1</a>",$str) . '<br/><br/>';

    } 

}

public function send_Message($user, $message) {
    if (!empty($user) && !empty($message)) {

        $user       = mysql_real_escape_string($user);
        $message    = mysql_real_escape_string($message);

        $send = DB::getInstance()->insert('chat', array(
                'id' => null,
                'user' => $user,
                'message' => $message
            ));

        if ($send = true) {
            return true;
        } else {
            return false;
        }

    } else {
        return false;
    }
}


}

我已经排除了一些错误,现在唯一的问题是字符串$ APPL没有转换为链接。如果我将$ AAPL更改为APPL,则转换为链接。我需要$ AAPL作为链接。

由于

1 个答案:

答案 0 :(得分:1)

好的,我已根据问题中的更新修改了我的答案。使用preg_replace_callback():

尝试此操作
$str = 'This is a $link this is not a link.';
$str = preg_replace_callback(
    '/\$([a-z]+)/i',
    function($match) {
        $white_list = Array();// Array of all the valid links, any other match will not be replaced
        return in_array($match[1], $white_list) ? ('<a href="http://finance.yahoo.com/q?s='.$match[1].'">'.ucfirst($match[1]).'</a>') : '$'.$match[1];
    },
    $str
);

var_dump($str); // Outputs: string(82) "This is a <a href="http://finance.yahoo.com/q?s=link">Link</a> this is not a link."