Мне нужна помощь в создании регулярного выражения для моего 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 . Это гораздо интереснее, чем регулярные выражения для такого рода вещей.
Есть ли вариант этого, который может дать список замененных переменных и какие файлы и номера строк совпадают?