Я хочу заменить первое вхождение строки ("[TOREPLACE]") в сообщении на форуме vbulletin, но только если эта строка не окружена тегами цитат bbcode.
Мой код:
if($firstpos = strpos($post['pagetext'], '[TOREPLACE]') !== false){
//check for quote
if($quote_start = strpos($post['pagetext'], '[QUOTE') !== false && $quote_end = strpos($post['pagetext'], '[/QUOTE]') !== false){
//quote found
//check if quote starts before egg
if($quote_start < $firstpos && $firstpos < $quote_end){
//don't replace, because the string that is to be replace is in between quotes
}
}
$post['pagetext_html'] = preg_replace('~\[TOREPLACE\]~i', '<img src="/src.jpg" border="0" />', $post['pagetext_html'], 1);
}
Я должен был бы зациклить это, чтобы найти первое вхождение строки, которая не находится в кавычках
Эта проверка цитаты утомительна и не очень элегантна. Кто-нибудь знает лучший алгоритм для выполнения вышесказанного?
Алгоритм: "Если в сообщении есть кавычки - найдите и замените первое вхождение, которого нет между тегами кавычек. Если кавычек нет, замените первое вхождение."
Может быть, я мог бы добавить все это в pre_match. Однако кавычки необязательны, и я не знаю, как это сделать.