preg_replace()没有找到结束分隔符?

时间:2011-10-01 09:49:15

标签: php mysql preg-replace preg-match

我使用preg_replace()很多,但我不是天才。

如果我启动一个功能并故意键入我想要使用的所有表情符号,例如

<?php
function parse_emotes($body){
    $body = preg_replace("#\:p#i", "<img src='images/emotes/tongue.png' alt=':p' title=':p' />", $body);
    //they continue like i said
    return $body;
}
?>

但今天我尝试改变它并使用mysql让我只是插入并删除它们,而不是在我的代码中播放,但是当我尝试它时,它只会抛出

  

警告:preg_replace()[function.preg-replace]:没有结束分隔符   '#'在第226行的PATH / TO / FILE.php中找到

以下是我第一次使用的代码:

<?php
function parse_emotes($body){
    while($row = $db->Query("SELECT * FROM emotes", 3)) {

        return $body = preg_replace($row['regex'], "<img src='images/emotes/" . $row['src'] . "' alt='" . $row['alt'] . "' title='" . $row['alt'] . "' />", $body);
    }
}
?>

这不起作用,是的,正则表达式行包含分隔符,因此它将输出#\:p#

我收到了前面提到的相同错误,然后我尝试从MySQL中的数据中取出#,然后更改preg_replace,如下所示

preg_replace('#' . $row['regex'] . '#i', .......)

它仍然不喜欢它?我也尝试过分配:

$regex = $row['regex'];
preg_replace("#$regex#i");
猜猜是什么?还是不行。任何有关这方面的帮助都非常感谢。

2 个答案:

答案 0 :(得分:3)

由于人们仍然在讨论这个话题。 @salathe在问题评论中是正确的(在循环中返回..哎呀)。

但这是答案:

$emotes = $db->select(['regex', 'class'])->from("emotes")->execute();
while ($emote = $db->fassoc($emotes)) {
    $body = preg_replace("#{$emote['regex']}#i", "<i class='sprite-emote {$emote['class']}'></i>", $body);
}
/* ...other parsing... */
return $body;

答案 1 :(得分:0)

更改您的代码
preg_replace('#' . $row['regex'] . '#i', .......)

preg_replace('/' . $row['regex'] . '/i', .......)