preg_replace () не находит конечный разделитель? - PullRequest
4 голосов
/ 01 октября 2011

Я использую 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]: В PATH / TO / FILE.php в строке 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#

Я получил ту же ошибку, как указано выше, а затем попытался взять# s из данных в MySQL и просто изменили preg_replace следующим образом

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

и все равно это не нравится?Я также попытался присвоить:

$regex = $row['regex'];
preg_replace("#$regex#i");

Угадайте, что?Все еще нет.Любая помощь в этом вопросе очень ценится.

Ответы [ 2 ]

3 голосов
/ 25 мая 2012

Так как люди все еще обсуждают эту тему.@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;
0 голосов
/ 01 октября 2011

Измените свой код с

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

до

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