Ранее говорилось, что вам нужно указывать разделители для PCRE. Если это вызывает удивление, то вот объяснение: в PCRE введена концепция "модификаторов", которые могут быть добавлены к регулярному выражению для изменения поведения компилятора и/или интерпретатора регулярных выражений. Модификатор всегда добавляется в конец выражения, сразу после разделителя. Например, в следующем регулярном выражении:
/test/i
последнее i — это модификатор.
Существует множество различных модификаторов. Вероятно, наиболее часто ис-
пользуемым является i, который заставляет обрабатывать регулярное выражение не-
зависимо от регистра. Рассмотрим пример, как это работает.
$s = 'Сегодня отличный день'; echo (pregjnatch ('/ОТличНый/i', $s) ? 'СОВПАДАЕТ' : 'НЕ СОВПАДАЕТ') . "\п"; ?>
Если выполнить этот сценарий, то он выведет слово СОВПАДАЕТ, означающее, что сравнение прошло успешно, так как модификатор i инициирует сравнение без учета регистра.
Другой часто используемый и чрезвычайно мощный модификатор — это е, который, будучи примененным в сочетании с i, вынуждает компилятор регулярных выражений интерпретировать параметр replacement не как простую строку, а как РНР-выражение, которое выполняется и его результат используется в качестве строки замены.
Ниже показан пример, который демонстрирует, насколько мощный этот модификатор.
$a = array ( 'name' => 'Торонто', 'object'=> 'город' ); $s • '{name} действительно замечательный {object}'; echo preg_replace ('/{ (\w+)}/e', ' $ a [ " \ l " ] ' , $s) ; ?>
Когда вы запускаете этот сценарий, функция preg_replace () находит все экземпляры буквенно-цифровых строк, ограниченных { и }, заменяет ссылку, созданную в $а["\1"], вычисляет результирующее PHP-выражение и заменяет его значение в исходной строке.
Разберем пример шаг за шагом. Первое совпадение в регулярном выражении будет подстрокой name, которая затем помещается в строку замены, создавая таким образом PHP-выражение $a["name"]. Позднее, при выполнении, возвращается значение
Торонто, которое подставляется внутри исходной строки. Тот же процесс повторяется для второго совпадения object, и возвращается финальный результат:
Торонто действительно замечательный город
Представьте, насколько сложнее было бы сделать что-то подобное без регулярных выражений и модификатора е!
|