X

preg_replace и номера карманов

Представим себе такой случай: есть текст, "Поздравляю всех с Новым, 20 годом"
И мы хотим с помощью preg_replace сделать замену 20 на 2011.
Пишем регулярку: preg_replace('|([0-9]{2})|', '$111', $str);
Чем компилятор приводим в шок, т.к. он не найдет карман с номером 111. Что же делать?

Все достаточно просто, и инфа об этом есть в хелпе на пхп.нет, но такие мелочи часто забываются..

Так вот, в нашем примере правильно будет, заключить номер в фигурные скобки, а перед $ поставить слеш, вот так:

preg_replace('|([0-9]{2})|', "\${1}1", $str);

(!) Обратите внимание:
Обязательно использовать двойные кавычки - "

Теперь мы получим то, что и хотели!

P.S. Пример, разумеется, не из реальной жизни, а просто для демонстрации.

Категории: PHP
Тэги: pcre