В сегодняшней статье мы рассмотрим регулярные выражения в PHP, а также увидим практические примеры использования регулярных выражений в PHP скриптах.
Основы регулярных выражений в PHPВ самом начале появления регулярных выражений на них была возложена задача помощи при работе со строками в Unix системах. Позже они стали активно использоваться не только в других системах, но и в разных языках программирования.
В PHP регулярные выражения используются для синтаксического анализа текста в соответствии с определенным шаблоном. Используя регулярные выражения, вы можете легко найти по шаблону нужный текст в строке, и заменить его, если нужно, или просто сделать проверку на наличие такого текста.
Типы регулярных выраженийСуществует 2 типа регулярных выражений:
- Perl совместимый
- POSIX расширенный
Perl совместимые функции – это такие как preg_match , preg_replace , а версии POSIX – такие как ereg , eregi . Учтите, что последние функции считаются устаревшими в PHP 5.3.0 и были удалены в . Поэтому мы будем использовать только Perl совместимые функции. Важно знать, что при использовании Perl-совместимых регулярных выражений, такое выражение должно быть заключено в разделители, например, косую черту (/).
Основной синтаксис регулярных выражений в PHPЧтобы использовать регулярные выражения, сначала вам нужно изучить синтаксис шаблонов. Мы можем сгруппировать символы внутри шаблона следующим образом:
- Обычные символы, которые следуют один за другим, например, hello
- Индикаторы начала и окончания строки в виде ^ и $
- Индикаторы подсчета, такие как + , * , ?
- Логические операторы, такие как |
- Группирующие операторы, такие как {} , () ,
Пример шаблона регулярного выражения для проверки правильности адреса электронного ящика выглядит следующим образом:
Код PHP для проверки электронной почты с использованием Perl-совместимого регулярного выражения выглядит следующим образом:
Теперь давайте посмотрим на подробный разбор синтаксиса шаблона при регулярном выражении:
Регулярное выражение (шаблон) | Проходит проверку (объект) | Не проходит проверку (объект) | Комментарий |
world | Hello world | Hello Ivan | Проходит, если шаблон присутствует где-либо в объекте |
^world | world class | Hello world | Проходит, если шаблон присутствует в начале объекта |
world$ | Hello world | world class | Проходит, если шаблон присутствует в конце объекта |
world/i | This WoRLd | Hello Ivan | Выполняет поиск в нечувствительном к регистру режиме |
^world$ | world | Hello world | Строка содержит только «world» |
world* | worl, world, worlddd | wor | Присутствует 0 или больше «d» после «worl» |
world+ | world, worlddd | worl | Присутствует по крайней мере одна «d» после «worl» |
world? | worl, world, worly | wor, wory | Присутствует 0 или 1 «d» после «worl» |
world{1} | world | worly | Присутствует одна «d» после «worl» |
world{1,} | world, worlddd | worly | Присутствует одна или больше «d» после «worl» |
world{2,3} | worldd, worlddd | world | Присутствует 2 или 3 «d» после «worl» |
wo(rld)* | wo, world, worldold | wa | Присутствует 0 или больше «rld» после «wo» |
earth|world | earth, world | sun | Строка содержит «earth» или «world» |
w.rld | world, wwrld | wrld | Содержит любой символ вместо точки |
^.{5}$ | world, earth | sun | Строка содержит ровно 5 символов |
abc, bbaccc | sun | В строке есть «a», или «b» или «c» | |
world | WORLD | В строке есть любые строчные буквы | |
world, WORLD, Worl12 | 123 | В строке есть любые строчные или прописные буквы | |
[^wW] | earth | w, W | Фактический символ не может быть «w» или «W» |
Теперь перейдем к более сложному регулярному выражению с подробным объяснением.
Практические примеры сложных регулярных выраженийТеперь, когда вы знаете теорию и основной синтаксис регулярных выражений в PHP, пришло время создать и проанализировать некоторые более сложные примеры.
1) Проверка имени пользователя с помощью регулярного выражения
Начнем с проверки имени пользователя. Если у вас есть форма регистрации, вам понадобится проверять на правильность имена пользователей. Предположим, вы не хотите, чтобы в имени были какие-либо специальные символы, кроме « _.- » и, конечно, имя должно содержать буквы и возможно цифры. Кроме того, вам может понадобиться контролировать длину имени пользователя, например от 4 до 20 символов.
Сначала нам нужно определить доступные символы. Это можно реализовать с помощью следующего кода:
После этого нам нужно ограничить количество символов следующим кодом:
Теперь собираем это регулярное выражение вместе:
^{4,20}$
В случае Perl-совместимого регулярного выражения заключите его символами ‘ / ‘. Итоговый PHP-код выглядит так:
2) Проверка шестнадцатеричного кода цвета регулярным выражением
Шестнадцатеричный код цвета выглядит так: #5A332C , также допустимо использование краткой формы, например #C5F . В обоих случаях код цвета начинается с # и затем идут ровно 3 или 6 цифр или букв от a
до f
.
Итак, проверяем начало кода:
^#Затем проверяем диапазон допустимых символов:
После этого проверяем допустимую длину кода (она может быть либо 3, либо 6). Полный код регулярного выражения выйдет следующим:
^#(({3}$)|({6}$))
Здесь мы используем логический оператор, чтобы сначала проверить код вида #123 , а затем код вида #123456 . Итоговый PHP-код проверки регулярным выражением выглядит так:
3) Проверка электронной почты клиента с использованием регулярного выражения
Теперь давайте посмотрим, как мы можем проверить адрес электронной почты с помощью регулярных выражений. Сначала внимательно рассмотрите следующие примеры адресов почты:
[email protected] [email protected] [email protected]
Как мы можем видеть, символ @ является обязательным элементом в адресе электронной почты. Помимо этого должен быть какой-то набор символов до и после этого элемента. Точнее, после него должно идти допустимое доменное имя.
Таким образом, первая часть должна быть строкой с буквами, цифрами или некоторыми специальными символами, такими как _-. . В шаблоне мы можем написать это следующим образом:
^+
Доменное имя всегда имеет, скажем, имя и tld (top-level domain ) – т.е, доменную зону. Доменная зона – это.com , .ua , .info и тому подобное. Это означает, что шаблон регулярного выражения для домена будет выглядеть так:
+\.{2,5}$
Теперь, если мы соберем все в кучу, то получим полный шаблон регулярного выражения для проверки адреса электронной почты:
^+@+\.{2,5}$
В коде PHP эта проверка будет выглядеть следующим образом:
Надеемся, что сегодняшняя статья помогла вам при знакомстве с регулярными выражениями в PHP, а практические примеры пригодятся вам при использовании регулярных выражений в собственных PHP скриптах.
PHP regexp — это мощный алгоритм сопоставления шаблонов, которое может быть выполнено в одном выражении. Регулярные выражения PHP используют арифметические операторы (такие как +, -, ^ ) для создания сложных выражений.
Для чего используются регулярные выражения:
- Регулярные выражения упрощают идентификацию строковых данных путем вызова одной функции. Это экономит время при составлении кода;
- При проверке введенных пользователем данных, таких как адрес электронной почты, домен сайта, номер телефона, IP-адрес ;
- Выделение ключевых слов в результатах поиска;
- Регулярные выражения могут использоваться для идентификации тегов и их замены.
PHP содержит встроенные функции, которые позволяют работать с регулярными выражениями. Теперь рассмотрим часто используемые функции регулярных выражений PHP .
- preg_match — используется для выполнения сопоставления с шаблоном строки. Она возвращает true , если совпадение найдено, и false , если совпадение не найдено;
- preg_split — используется для разбивки строки по шаблону, результат возвращается в виде числового массива;
- preg_replace – используется для поиска по шаблону и замены на указанную строку.
Ниже приведен синтаксис функций регулярных выражений, таких как preg_match , preg_split или PHP regexp replace :
«имя_функции»
— это либо preg_match
, либо preg_split
, либо preg_replace
.
«/…/»
— косые черты обозначают начало и конец регулярного выражения.
«‘/шаблон/"»
— шаблон, который нам нужно сопоставить.
«объект»
— строка, с которой нужно сопоставлять шаблон.
Теперь рассмотрим практические примеры использования упомянутых выше функций.
Preg_matchВ первом примере функция preg_match используется для выполнения простого сопоставления шаблоном для слова guru в заданном URL-адресе .
В приведенном ниже коде показан вариант реализации данного примера:
Рассмотрим ту часть кода, которая отвечает за вывод «preg_match (‘/ guru /’, $ my_url)» .
«preg_match(…)»
— функция PHP match regexp
.
«‘/Guru/"»
— шаблон регулярного выражения.
«$My_url»
— переменная, содержащая текст, с которым нужно сопоставить шаблон.
Рассмотрим другой пример, в котором используется функция preg_split .
Мы возьмем фразу и разобьем ее на массив; шаблон предназначен для поиска единичного пробела:
Preg_replaceРассмотрим функцию preg_replace , которая выполняет сопоставление с шаблоном и заменяет найденный результат другой строкой.
Приведенный ниже код ищет в строке слово guru . Он заменяет его кодом css , который задает цвет фона:
МетасимволыВ приведенных выше примерах использовались простые шаблоны. Метасимволы позволяют выполнять более сложные сопоставления шаблонов PHP regexp , такие как проверка адреса электронной почты. Рассмотрим часто используемые метасимволы.
Метасимвол | Описание | Пример |
. | Обозначает любой единичный символ, кроме символа новой строки. | /./ — все, что содержит один символ. |
^ | Обозначает начало строки, не включая символ /. | /^PH/ — любая строка, которая начинается с PH. |
$ | Обозначает шаблон в конце строки. | /com$/ — guru99.com,yahoo.com и т.д. |
* | Обозначает любое количество символов, ноль или больше. | /com*/ — computer, communication и т.д. |
+ | Требуется вхождение перед метасимволом символа (ов) хотя бы один раз. | /yah+oo/ — yahoo. |
Символ экранирования. | /yahoo+.com/ — воспринимает точку, как дословное значение. | |
[…] | Класс символов. | // — abc. |
a-z | Обозначает строчные буквы. | /a-z/ — cool, happy и т.д. |
A-Z | Обозначает заглавные буквы. | /A-Z/ — WHAT, HOW, WHY и т.д. |
0-9 | Обозначает любые цифры от 0 до 9. | /0-4/ — 0,1,2,3,4. |
Теперь рассмотрим сложный PHP regexp пример, в котором проверяется валидность адреса электронной почты:
Результат: адрес электронной почты [email protected] является валидным.
Пояснение шаблона «+@+.{2,5}$/] ««‘/…/"»
начинает и завершает регулярное выражение.
«^»
соответствует любым буквам в нижнем или верхнем регистре, цифрам от 0 до 9 и точкам, подчеркиваниям или тире.
«+@»
соответствует символу @
, за которым следуют буквы в нижнем или верхнем регистре, цифры от 0 до 9 или дефисы.
«+.{2,5}$/»
указывает точку, используя обратную косую черту, затем должны следовать любые буквы в нижнем или верхнем регистре, количество символов в конце строки должно быть от 2 до 5.
Метасимволы являются полезными, когда речь идет о сопоставлении на соответствие шаблонам. Заключение
- PHP regexp — это алгоритм поиска по шаблону;
- Регулярные выражения полезны при выполнении проверок валидности, создании HTML-шаблонов , которые распознают теги и т. д.;
- PHP имеет встроенные функции для работы с регулярными выражениями: preg_match , preg_split и preg_replace ;
- Метасимволы позволяют создавать сложные шаблоны.
Данная публикация представляет собой перевод статьи «PHP Regular Expressions » , подготовленной дружной командой проекта
Регулярные выражения позволяют найти в строке последовательности, соответствующие шаблону. Например шаблон "Вася(.*)Пупкин" позволит найти последовательность когда между словами Вася и Пупкин будет любое количество любых символов. Если надо найти шесть цифр, то пишем "{6}" (если, например, от шести до восьми цифр, тогда "{6,8}"). Здесь разделены такие вещи как указатель набора символов и указатель необходимого количества:
Вместо набора символов может быть использовано обозначение любого символа - точка,
может быть указан конкретный набор символов (поддерживаются последовательности - упоминавшиеся "0-9").
Может быть указано "кроме данного набора символов".
Указатель количества символов в официальной документации по php называется "квантификатор". Термин удобный и не несет в себе кривотолков. Итак, квантификатор может иметь как конкретное значение - либо одно фиксированное ("{6}"), либо как числовой промежуток ("{6,8}"), так и абстрактное "любое число, в т.ч. 0" ("*"), "любое натуральное число" - от 1 до бесконечности ("+": "document+.txt"), "либо 0, либо 1" ("?"). По умолчанию квантификатор для данного набора символов равен единице ("document.txt").
Для более гибкого поиска сочетаний эти связки "набор символов - квантификатор" можно объединять в метаструктуры.
Как всякий гибкий инструмент, регулярные выражения гибки, но не абсолютно: зона их применения ограничена. Например, если вам надо заменить в тексте одну фиксированную строку на другую, фиксированную опять же, пользуйтесь str_replace. Разработчики php слезно умоляют не пользоваться ради этого сложными функциями ereg_replace или preg_replace, ведь при их вызове происходит процесс интерпретации строки, а это серьезно потребляет ресурсы системы. К сожалению, это любимые грабли начинающих php-программистов.
Пользуйтесь функциями регулярных выражений только если вы не знаете точно, какая "там" строка.
Из примеров: поисковый код, в котором из строки
поиска вырезаются служебные символы и короткие слова а так же вырезаются лишние пробелы
(вернее, все пробелы сжимаются: " +" заменяется на один пробел).
При помощи этих функций я проверяю email пользователя, оставляющего свой отзыв.
Много полезного можно сделать, но важно иметь в виду: регулярные выражения не всесильны.
Например, сложную замену в большом тексте ими лучше не делать.
Ведь, к примеру, комбинация "(.*)" в программном плане означает перебор всех символов текста.
А если шаблон не привязан к началу или концу строки, то и сам шаблон "двигается" программой через весь текст,
и получается двойной перебор, вернее перебор в квадрате. Нетрудно догадаться, что еще одна комбинация "(.*)"
означает перебор в кубе, и так далее. Возведите в третью степень, скажем, 5 килобайт текста.
Получается 125 000 000 000 (прописью: сто двадцать пять миллиардов операций).
Конечно же, если подходить строго, там стольких операций не будет, а будет раза в четыре-восемь меньше,
но важен сам порядок цифр.
. | точка | любой символ |
[] | квадратные скобки | класс символов ("любое из"). Например |
[^] | негативный класс символов ("любое кроме") | |
- | тире | обозначение последовательности в классе символов ("" цифры) |
\d | Только цифры | |
\D | [^0-9] | Кроме цифр |
\w | Буквы и цифры | |
\W | [^a-z0-9] | Кроме букв и цифр |
\s | Пробельные символы: пробел, табуляция, перевод строки | |
\S | [^ ] | Кроме пробельных символов |
| | (одно|другое) | На этом месте может быть один из перечисленных вариантов, например: (Вася|Петя|Маша). Если Вы не хотите, чтобы это попало в выборку используйте (?: ...) |
Не пользуйтесь классом символов для обозначения всего лишь одного (вместо "+" вполне сойдет " +"). Не пишите в классе символов точку это ведь любой символ, тогда другие символы в классе будут просто лишними (а в негативном классе получится отрицание всех символов).
КвантификаторКвантификатором можно указать как конкретное значение, так и пределы. Если число заданных подпадает под пределы квантификатора, фрагмент выражения считается совпавшим с разбираемой строкой. Синтаксис:
{ }
{ , }
Если нужно указать только необходимый минимум, а максимума нет, просто ставим запятую и не пишем второе число: "{5,}" ("минимум 5"). Для наиболее часто употребляемых квантификаторов есть специальные обозначения:
На практике такие символы используются чаще, чем фигурные скобки.
ЯкоряЭти символы должны стоять соответственно в самом начале и в самом конце строки.
Жадность Вопросительный знак выступает еще и как минимизатор квантификатора:.*?
Результат работы примера: Жадная версия: жирный текст [b]а тут - еще жирнее вернулись Ленивая версия: жирный текст [b]а тут - еще жирнее вернулись
Строка шаблона, как вы уже заметили, начинается и заканчивается слэшами. После второго идут параметры:
i | регистронезависимый поиск |
m | многостроковый режим. По умолчанию PCRE ищет совпадения с шаблоном только внутри одной строки, а символы "^" и "$" совпадают только с началом и концом всего текста. Когда этот параметр установлен, "^" и "$" совпадают с началом и концом отдельных строк. |
s | символ "." (точка) совпадает и с переносом строки (по умолчанию нет) |
A | привязка к началу текста |
E | заставляет символ "$" совпадать только с концом текста. Игнорируется, если установлен парамерт m. |
U | Инвертирует "жадность" для каждого квантификатора (если же после квантификатора стоит "?", этот квантификатор перестает быть "жадным"). |
e | Строка замены интерпретитуется как PHP код. |
- preg_grep
- preg_match - Выполняет проверку на соответствие регулярному выражению. Данная функция ищет только первое совпадение!
- preg_match_all
- preg_quote - Экранирует символы в регулярных выражениях. Т.е. вставляет слэши перед всеми служебными символами (например, скобками, квадратными скобками и т.п.), чтобы те воспринимались буквально. Если у вас есть какой-либо ввод информации пользователем, и вы проверяете его с помощью регулярных выражений, то лучше перед этим заэкранировать служебные символы в пришедшей переменной
- preg_replace
- preg_replace_callback - Выполняет поиск по регулярному выражению и замену
- preg_split
Функция preg_grep - Возвращает массив вхождений, которые соответствуют шаблону
Синтаксис
array preg_grep (string pattern, array input [, int flags])
preg_grep() возвращает массив, состоящий из элементов входящего массива input, которые соответствуют заданному шаблону pattern.
Параметр flags может принимать следующие значения:
PREG_GREP_INVERT
В случае, если этот флаг установлен, функция preg_grep(), возвращает те элементы массива,
которые не соответствуют заданному шаблону pattern.
Результат, возвращаемый функцией preg_grep() использует те же индексы, что и массив исходных данных.
Если такое поведение вам не подходит, примените array_values() к массиву, возвращаемому preg_grep() для реиндексации.
Пример кода:
// Возвращает все элементы массива, // содержащие числа с плавающей точкой $fl_array = preg_grep("/^(\d+)?\.\d+$/", $array);
preg_matchФункция preg_match - Выполняет проверку на соответствие регулярному выражению
Синтаксис
int preg_match (string pattern, string subject [, array matches [, int flags [, int offset]]]) Ищет в заданном тексте subject совпадения с шаблоном pattern
В случае, если дополнительный параметр matches указан, он будет заполнен результатами поиска. Элемент $matches будет содержать часть строки, соответствующую вхождению всего шаблона, $matches - часть строки, соответствующую первой подмаске, и так далее.
flags может принимать следующие значения:
PREG_OFFSET_CAPTURE
Поиск осуществляется слева направо, с начала строки. Дополнительный параметр offset может быть использован для указания альтернативной начальной позиции для поиска. Аналогичного результата можно достичь, заменив subject на substr()($subject, $offset).
Функция preg_match() возвращает количество найденных соответствий. Это может быть 0 (совпадения не найдены) и 1, поскольку preg_match() прекращает свою работу после первого найденного совпадения. Если необходимо найти либо сосчитать все совпадения, следует воспользоваться функцией preg_match_all(). Функция preg_match() возвращает FALSE в случае, если во время выполнения возникли какие-либо ошибки.
Рекомендация: Не используйте функцию preg_match(), если необходимо проверить наличие подстроки в заданной строке. Используйте для этого strpos() либо strstr(), поскольку они выполнят эту задачу гораздо быстрее.
Пример кода Пример кода Пример кода Результат работы примера:domain name is: сайт
preg_match_allФункция preg_match_all - Выполняет глобальный поиск шаблона в строке
Синтаксис
int preg_match_all (string pattern, string subject, array matches [, int flags [, int offset]])
Ищет в строке subject все совпадения с шаблоном pattern и помещает результат в массив matches в порядке, определяемом комбинацией флагов flags.
После нахождения первого соответствия последующие поиски будут осуществляться не с начала строки, а от конца последнего найденного вхождения.
Дополнительный параметр flags может комбинировать следующие значения (необходимо понимать, что использование PREG_PATTERN_ORDER одновременно с PREG_SET_ORDER бессмысленно):
PREG_PATTERN_ORDER
Если этот флаг установлен, результат будет упорядочен следующим образом: элемент
$matches содержит массив полных вхождений шаблона,
элемент $matches содержит массив вхождений первой подмаски, и так далее.
Как мы видим, $out содержит массив полных вхождений шаблона, а элемент $out содержит массив подстрок, содержащихся в тегах.
PREG_SET_ORDER
Если этот флаг установлен, результат будет упорядочен следующим образом:
элемент $matches содержит первый набор вхождений, элемент $matches содержит второй набор вхождений, и так далее.
В таком случае массив $matches содержит первый набор вхождений, а именно: элемент $matches содержит первое вхождение всего шаблона, элемент $matches содержит первое вхождение первой подмаски, и так далее. Аналогично массив $matches содержит второй набор вхождений, и так для каждого найденного набора.
PREG_OFFSET_CAPTURE
В случае, если этот флаг указан, для каждой найденной подстроки будет указана ее позиция в исходной строке.
Необходимо помнить, что этот флаг меняет формат возвращаемых данных: каждое вхождение возвращается в виде массива,
в нулевом элементе которого содержится найденная подстрока, а в первом - смещение.
В случае, если никакой флаг не используется, по умолчанию используется PREG_PATTERN_ORDER.
Поиск осуществляется слева направо, с начала строки. Дополнительный параметр offset может быть использован для указания альтернативной начальной позиции для поиска. Аналогичного результата можно достичь, заменив subject на substr()($subject, $offset).
Возвращает количество найденных вхождений шаблона (может быть нулем) либо FALSE, если во время выполнения возникли какие-либо ошибки.
Пример кода Пример кода Результат работы примера: matched: bold text part 1: part 2: bold text part 3: matched: click me part 1: part 2: click me part 3: preg_quoteФункция preg_quote - Экранирует символы в регулярных выражениях
Синтаксис
string preg_quote (string str [, string delimiter])
Функция preg_quote() принимает строку str и добавляет обратный слеш перед каждым служебным символом. Это бывает полезно, если в составлении шаблона участвуют строковые переменные, значение которых в процессе работы скрипта может меняться.
В случае, если дополнительный параметр delimiter указан, он будет также экранироваться. Это удобно для экранирования ограничителя, который используется в PCRE функциях. Наиболее распространенным ограничителем является символ "/".
В регулярных выражениях служебными считаются следующие символы: . \\ + * ? [ ^ ] $ () { } = ! < > | :
Функция preg_replace - Выполняет поиск и замену по регулярному выражению
Синтаксис
mixed preg_replace (mixed pattern, mixed replacement, mixed subject [, int limit])
Выполняет поиск в строке subject совпадений с шаблоном pattern и заменяет их на replacement. В случае, если параметр limit указан, будет произведена замена limit вхождений шаблона; в случае, если limit опущен либо равняется -1, будут заменены все вхождения шаблона.
Replacement может содержать ссылки вида \\n либо (начиная с PHP 4.0.4) $n, причем последний вариант предпочтительней. Каждая такая ссылка, будет заменена на подстроку, соответствующую n"нной заключенной в круглые скобки подмаске. n может принимать значения от 0 до 99, причем ссылка \\0 (либо $0) соответствует вхождению всего шаблона. Подмаски нумеруются слева направо, начиная с единицы.
При использовании замены по шаблону с использованием ссылок на подмаски может возникнуть ситуация,
когда непосредственно за маской следует цифра. В таком случае нотация вида \\n приводит к ошибке:
ссылка на первую подмаску, за которой следует цифра 1, запишется как \\11, что будет интерпретировано как ссылка на одиннадцатую подмаску.
Это недоразумение можно устранить, если воспользоваться конструкцией \${1}1, указывающей на изолированную ссылку на первую подмаску,
и следующую за ней цифру 1.
Пример кода
Результатом работы этого примера будет:
Если во время выполнения функции были обнаружены совпадения с шаблоном, будет возвращено измененное значение subject, в противном случае будет возвращен исходный текст subject.
Первые три параметра функции preg_replace() могут быть одномерными массивами. В случае, если массив использует ключи, при обработке массива они будут взяты в том порядке, в котором они расположены в массиве. Указание ключей в массиве для pattern и replacement не является обязательным. Если вы все же решили использовать индексы, для сопоставления шаблонов и строк, участвующих в замене, используйте функцию ksort() для каждого из массивов.
The bear black slow jumped over the lazy dog.
Используя ksort(), получаем желаемый результат:
The slow black bear jumped over the lazy dog.
В случае, если параметр subject является массивом, поиск и замена по шаблону производятся для каждого из его элементов. Возвращаемый результат также будет массивом.
В случае, если параметры pattern и replacement являются массивами, preg_replace() поочередно извлекает из обоих массивов по паре элементов и использует их для операции поиска и замены. Если массив replacement содержит больше элементов, чем pattern, вместо недостающих элементов для замены будут взяты пустые строки. В случае, если pattern является массивом, а replacement - строкой, по каждому элементу массива pattern будет осущесвтлен поиск и замена на pattern (шаблоном будут поочередно все элементы массива, в то время как строка замены остается фиксированной). Вариант, когда pattern является строкой, а replacement - массивом, не имеет смысла.
Модификатор /e меняет поведение функции preg_replace() таким образом, что параметр replacement после выполнения необходимых подстановок интерпретируется как PHP-код и только после этого используется для замены. Используя данный модификатор, будьте внимательны: параметр replacement должен содержать корректный PHP-код, в противном случае в строке, содержащей вызов функции preg_replace(), возникнет ошибка синтаксиса.
Пример кода: Замена по нескольким шаблонамЭтот пример выведет:
$startDate = "5/27/1999";
Пример кода: Использование модификатора /e Пример кода: Преобразует все HTML-теги к верхнему регистру preg_replace_callbackФункция preg_replace_callback - Выполняет поиск по регулярному выражению и замену с использованием функции обратного вызова
Синтаксис
mixed preg_replace_callback (mixed pattern, callback callback, mixed subject [, int limit])
Поведение этой функции во многом напоминает preg_replace(), за исключением того,
что вместо параметра replacement необходимо указывать callback функцию, которой в качестве входящего параметра передается массив найденных вхождений.
Ожидаемый результат - строка, которой будет произведена замена.