Pregreplace возвращает пустую строку

Я пытаюсь выделить слова в тексте с помощью pregreplace. Слова находятся в массиве, который я загружаю в pregreplace. Раньше это работало, но остановилось, возможно, из-за обновления php в прошлом, теперь ничего не возвращает.

// Function highlights $words in $str 
function highlight_words($str, $words) {
    global  $color;
    if (is_array($words)) {
        foreach($words as $k => $word) {
            // $pattern[$k] = "~\b($word)\b~is";
            $pattern[$k] = "/$word/";
            $replace[$k] = '<span style = "background: '.$color[2].';color:'.$color[4].';">\\1</span>';
        }
    }
    else {
        $pattern = "~\b($words)\b~is";
        $replace = '<span style = "background: '.$color[2].';color:'.$color[4].';">\\1</span>';
    }
    return preg_replace($pattern,$replace ,$str);
}


echo highlight_words($text, $words);

значения шаблона:

Array
(
[0] => /$18.5mUSD/
[1] => /$8,000,000.00/
[2] => /(at)/
[3] => /+43 688 649 45702/
...

значения $replace:

Array
(
[0] => <span style = "background: #FF6B02;color:#FFFFFF;">\1</span>
[1] => <span style = "background: #FF6B02;color:#FFFFFF;">\1</span>
[2] => <span style = "background: #FF6B02;color:#FFFFFF;">\1</span>
[3] => <span style = "background: #FF6B02;color:#FFFFFF;">\1</span>
...

preg_replace просто ничего не возвращает. Кажется, проблема с массивом, но синтаксис выглядит нормально. Если я изменю preg_replace, чтобы заменить какой-то простой шаблон регулярного выражения, это сработает, но это не работает с массивом.

Как это можно исправить?

Вам нужно избегать любых символов, которые имеют особое значение $ + . и т. д. в шаблоне: $pattern[$k] = "/" . preg_quote($word, "/") . "/";

AbraCadaver 21.02.2019 20:00

Кроме того, между пробелами и $ или ( нет границы слова. Используйте $pattern = "~(?<!\w)($words)(?!\w)~is" вместо $pattern = "~\b($words)\b~is".

Wiktor Stribiżew 21.02.2019 20:18
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
2
20
0

Другие вопросы по теме