PHP regex templating – найти все вхождения {{var}}

Мне нужна помощь в создании регулярного выражения для моего 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 docs?

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

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

Используйте 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).

Для корректного анализа HTML / XML рассмотрите возможность использования Document Object Model (DOM) в сочетании с XPath . Это гораздо интереснее, чем регулярные выражения для такого рода вещей.

Есть ли вариант этого, который может дать список замененных переменных и какие файлы и номера строк совпадают?