php - preg_replace() 找不到结束分隔符?

标签 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 让我可以随意插入和删除它们而无需在我的代码中播放,但是当我尝试它时,它只会抛出

Warning: preg_replace() [function.preg-replace]: No ending delimiter '#' found in PATH/TO/FILE.php on line 226

这是我第一次使用的代码:

<?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");

你猜怎么着?还是不行。非常感谢任何有关如何进行此操作的帮助。

最佳答案

因为人们仍然对这个话题投反对票。 @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;

关于php - preg_replace() 找不到结束分隔符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7619476/

相关文章:

javascript - 将 HTML 表数据存储到 Javascript 数组中

php - Codeigniter Extend 自定义模型产生 fatal error

php - Yii2:如何在model->save()之后执行sql查询

php - 从字符串中提取 URL

php - preg_replace sql结果和字符串之间的不同结果

php - OpenSSL 错误消息 : error:1416F086:SSL routines:tls_process_server_certificate:certificate verify failed

Mysql找到非常短的字符串的匹配?

python - 通过表单将表情符号添加到数据库时出现不正确的字符串错误

MySQL高效数据转联表查询

php - 从 PHP 中的查询字符串中删除空白变量和重复变量