Замена вхождений в тексте по регулярке

180
05 мая 2017, 20:02

Здравствуйте.

Есть php-переменная $html в которой какой-то html, а в нём встречаются вхождения типа {PHRASE=1}, {PHRASE=2}, {PHRASE=N}. Эти вхождения необходимо заменять соответствующими фразами из БД mySQL по их id, т.е. {PHRASE=5} должно замениться на фразу с id=5 и текстом "Фраза номер пять", и так далее.

Пишу функцию. Вот до чего я дошёл сам:

    function rewriteHtml($html) {
    $phrase = 'PHRASE';
    if (mb_strpos($html, $phrase) === false){
    // если слово PHRASE в тексте переменной не встречается, то всё понятно
        $new_html = $html;
    } else {
     // а вот если встречается, то тут надо составить какую-то регулярку, и по ней как-то отыскать айдишники, а уж дальше я необходимые форазы из БД вытащу))  
        $new_html = ??????????;
    } 
    return $new_html;
}  

В регулярках вообще не силён, и плохо представляю дальнейший алгоритм работы.

Спасибо за помощь!

Answer 1

С использованием регулярных выражений для поиска числовых IDрешение будет, например, таким:

Исходные данные

$html = <<< HTML
<a href="#">{phrase=1}</a>
<p>{phrase=2}<strong>{phrase=3}<srong></p>
<b>{phrase=2}</b>
HTML;

Извлечение уникальных значений

if(preg_match_all("/{phrase=(\d+)}/", $html, $matches, PREG_PATTERN_ORDER)){
    $ids = array_unique($matches[1]);
    print_r($ids);
}

где флаг PREG_PATTER_ORDER определяет, что в matches[1] будут содержаться значения всех первых групп, а array_unique получает только уникальные идентификаторы из найденных.

Answer 2

можно и так

for($i=1; $i < count($data); $i++) {
   str_replace('PHRASE_' . $i, $data[$i-1]);
}

где data это данные вытащеные с базы с соответственными id.

READ ALSO
как избежать вложенные формы

как избежать вложенные формы

Друья! Есть формаВизуально выглядит так:

186
OneDrive api php

OneDrive api php

Как мне загрузить файл большого размера на OneDrive используя PHP?

293
Вывод статей в yii2

Вывод статей в yii2

Нужно вывести с бд последние статьи в сайдбар, не понимаю ничего, помогите пожалуйста)

212
Освобождение памяти после sql запроса [PHP] [MYSQLI]

Освобождение памяти после sql запроса [PHP] [MYSQLI]

Здравствуйте столкнулся с проблемой связной с освобождением памяти на запросТекший код выглядят перемерено так:

197