Php регулярные выражения для тегов. Регулярные выражения PHP. Пример регулярного выражения для получения изображений из html кода

PHP, как и полагается современному языку программирования, предлагает разработчику набор функций для использования регулярных выражений. Можно искать вхождения строк в другие строки по сложным критериям.

  • PREG_PATTERN_ORDER;
  • PREG_SET_ORDER.

Сортировка по первому варианту группирует результаты поиска по номеру регулярного выражения (значение по умолчанию). Во втором случае результаты группируются по месту их нахождения в строке.

Символ - элемент шаблона

Важно помнить, что шаблон оперирует символами. Программирование уже давно забыло, что такое тип данных "символ". Современные языки не опускаются ниже понятия "строка", но в отношении шаблона надо понимать: здесь манипулируют символами.

Построение шаблона - это, прежде всего, указание нужной последовательности символов. Если это четко усвоить, то ошибок в шаблоне не будет. Во всяком случае, будет гораздо меньше.

  • а - это конкретный элемент шаблона - символ.
  • a-z - это элемент шаблона, тоже один символ, но только со значением от a до z - вся латиница в нижнем регистре.
  • 0-9 - это одна цифра, причем любая, а вот 1-3 - только 1, 2 или 3.

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

Шаблон функции

PHP preg match all использует стандартный синтаксис регулярных выражений. обозначают один из символов, который в них указан:

  • только символы a, b, c.
  • [^ABC] все, кроме символов A, B, C.
  • \w и \W - текстовый или не текстовый символ.
  • \s и \S - пробельный или не пробельный символ.
  • \d и \D - цифра или не цифра.

Символы повторения обозначаются фигурными скобками - {n,m} и относятся к предыдущему символу.

  • n обозначает повторение "не менее";
  • m - повторение "не более".

Синтаксис предусматривает множество вариантов для создания шаблонов, но лучше всего начинать с азов, то есть с простых, собственноручно написанных, в которых сложные элементы и комбинации отсутствуют.

Проще говоря, перечислив реальные символы, которые нужны, указав их нужные количества и учтя, что символ "^" соответствует началу, а "$" - концу строки, можно создавать простенькие шаблоны. Анализируя реальные отлаженные регулярные выражения от квалифицированных специалистов, можно обрести прочные знания для создания сложных применений preg match all. Арсенал PHP не ограничен только этими двумя функциями, но они чаще всего используются.

Простая практика

Шаблон для целого числа:

  • "/*/"

Тоже шаблон целого числа, но спереди может быть знак ("+", "-"), и спереди/сзади могут быть лишние пробелы:

  • /^[\s|\+|\-]{0,1}*/

Аналогично:

  • /^[\s|\+|\-]{0,1}*(\.)*/ - число с точкой.
  • /+@+\.{2,3}/ - вариант для распознавания e-mail.

Применение собственных шаблонов для preg match all, примеры их в интернете, анализ кода страниц сайтов и другие источники позволяют сформировать собственную библиотеку шаблонов.

Вариантов для поиска информации может быть множество. В частности, приведенные последние две конструкции можно смоделировать иначе. Во многих случаях предпочтение будет иметь тот шаблон, который быстрее и точнее обеспечит нужное совпадение. Применение на PHP 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 содержит массив вхождений первой подмаски, и так далее.

Возвращает количество найденных вхождений шаблона (может быть нулем) либо FALSE , если во время выполнения возникли какие-либо ошибки.


Пример 2. Жадный поиск совпадений с HTML-тэгами

Результатом работы этого примера будет:

Если во время выполнения функции были обнаружены совпадения с шаблоном, будет возвращено измененное значение 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 функцию, которой в качестве входящего параметра передается массив найденных вхождений. Ожидаемый результат - строка, которой будет произведена замена.

Пример кода