Флаги регулярного выражения

Может кто-нибудь объяснить, что делает флаг "e", или связать меня с чем-то, что делает? Я не смог найти ничего через Google.

Пример:

preg_replace("/a(b?)c/e", "search_foo_term('\$1')", $str);

Ответ 1

e (PREG_REPLACE_EVAL)

Если этот модификатор установлен, preg_replace() делает нормально замена обратных ссылок в замены, оценивает его как PHP-код и использует результат для заменяя строку поиска. Один цитаты, двойные кавычки, обратная косая черта() и символы NULL будут экранированы обратная косая черта в замещающей обратные_связи. Только preg_replace() использует этот модификатор; он игнорируется другие функции PCRE.

http://www.php.net/manual/en/reference.pcre.pattern.modifiers.php

Итак, учитывая этот пример:

preg_replace("/a(b?)c/e", "search_foo_term('\$1')", $str);

Замена всего матча будет тем, что возвращает search_foo_term() при передаче соответствия для b?.

Ответ 2

Флаг e устарел, главным образом по соображениям безопасности. Вместо этого используйте preg_replace_callback.