PHP регулярное выражение - найти все вхождения {{var}} - PullRequest
4 голосов
/ 06 июня 2009

Мне нужна помощь в создании регулярного выражения для моего php-скрипта. По сути, у меня есть ассоциативный массив, содержащий мои данные, и я хочу использовать preg_replace, чтобы заменить некоторые заполнители на реальные данные. Ввод будет выглядеть примерно так:

<td>{{address}}</td><td>{{fixDate}}</td><td>{{measureDate}}</td><td>{{builder}}</td>

Я не хочу использовать str_replace, потому что массив может содержать гораздо больше элементов, чем мне нужно.

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

<td>{{address}}</td>

заменяется значением $ replace ['address'] . Это правда, или я неправильно прочитал php документы?

Если это правда, может кто-нибудь помочь мне показать регулярное выражение, которое проанализирует это для меня (было бы полезно, если бы вы также объяснили, как оно работает, поскольку я пока не очень хорош с регулярными выражениями).

Большое спасибо.

Ответы [ 3 ]

8 голосов
/ 06 июня 2009

Использование preg_replace_callback(). Это невероятно полезно для такого рода вещей.

$replace_values = array(
  'test' => 'test two',
);
$result = preg_replace_callback('!\{\{(\w+)\}\}!', 'replace_value', $input);

function replace_value($matches) {
  global $replace_values;
  return $replace_values[$matches[1]];
}

В основном это говорит о том, что нужно найти все вхождения {{...}}, содержащие символы слова, и заменить это значение значением из таблицы поиска (являющейся глобальным $ replace_values).

0 голосов
/ 05 апреля 2018

Чтобы не использовать глобальные переменные и корректно обрабатывать недостающие ключи, вы можете использовать

function render($template, $vars) {
        return \preg_replace_callback("!{{\s*(?P<key>[a-zA-Z0-9_-]+?)\s*}}!", function($match) use($vars){
            return isset($vars[$match["key"]]) ? $vars[$match["key"]] : $match[0];
        }, $template);
    }
0 голосов
/ 06 июня 2009

Для правильного синтаксического анализа HTML / XML рассмотрите возможность использования объектной модели документов (DOM) в сочетании с XPath . Гораздо веселее использовать это, чем регулярные выражения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...