2010-10-20 4 views
6
preg_replace("/{{(.*?)}}/e","$$1",$rcontent); 

Пожалуйста, объясните о мне ... я не могу понять этоPHP preg_replace

+0

Почему голосовать, чтобы закрыть это? Довольно ясно, что вопрос задается вопросом, что означает регулярное выражение. – JAL

+0

@Alex JL: Я не голосовал за закрытие, но, должно быть, это был титул. Я не знаю, какие метатеги имеют отношение к этому вопросу. – BoltClock

+0

@BoltClock это довольно загадочно. – JAL

ответ

4

Рассмотрим пример использования:

$rcontent = "abc {{foo}} def"; 
$foo = 'bar'; 
$rcontent = preg_replace("/{{(.*?)}}/e","$$1",$rcontent); 
echo $rcontent; // prints abc bar def 

Я предполагаю, что вы присваиваете значение preg_match назад до $rcontent, иначе это не будет иметь никакого смысла.

Теперь регулярное выражение вы используете {{(.*?)}}, который ищет что-нибудь (не greedyly) между {{ и }}, а также запоминает найденную строку из круглых скобок.
В моем случае .*? соответствует foo.

Следующая деталь замены $$1. В настоящее время $1 составляет foo, поэтому $$1 будет $foo, что составляет bar. Таким образом, значение {{foo}} будет заменено на значение $foo, которое равно bar.

Если $$1 просто тип и вы использовать $1 то регулярное выражение заменяет {{foo}} с foo.

+0

$ file = file ("templates/index.html"); $ rcontent = join ("", $ file); $ rcontent = preg_replace ("/{{(.*?)}}/ e", "$$ 1", $ rcontent); print $ rcontent; Это мой код. Работает отлично .. но шаблоны/index.html-файл не имеют в себе никаких парантез. – sowmiya

+0

@sowmiya: Извините, я не получил ваш вопрос. – codaddict

+0

копировать содержимое «templates/index.html» в файл php ... Чтобы скопировать содержимое am с помощью этого регулярного выражения, у меня нет фигурных скобок в моем файле «templates/index.html». но он отлично работает. Как работает этот механизм шаблонов, я не знаю ... – sowmiya

0

ленивый * Повторяет предыдущий элемент ноль или более раз. Lazy, поэтому движок сначала пытается пропустить предыдущий элемент, прежде чем пытаться перестановки с все возрастающими совпадениями предыдущего элемента.

для например: .*? соответствует "def" в abc "def" "ghi" jkl

http://www.regular-expressions.info/reference.html