Полезные регулярные выражения для PHP. Регулярные выражения в PHP Preg match all регулярные выражения

) я показал вам пример использования регулярных выражений для нахождения определенных кусков исходного кода страницы. Сейчас же мы с вами научимся писать их самостоятельно. Данный навык поможет писать , очищать текст от ненужных фрагментов, искать нужные части в больших объемах текста и так далее.

Эта тема довольно непроста, но я постараюсь в краткой форме осветить самые важные моменты. Не знаю насколько это у меня получится, но надеюсь польза от урока будет.
Итак, начнем с того, что для работы с регулярными выражениями в PHP существует несколько функций, но чаще всего используются три:

  • preg_replace — поиск и замена подходящего по регулярному выражению текста;
  • preg_match — просто поиск по регулярке;
  • preg_split — поиск и разделение текста.

По крайней мере, в предыдущих уроках мы пользовались именно ими. Вернее, вместо preg_match был preg_match_all, но это по сути тоже самое, только последний не прерывает поиск после первого нахождения. То есть, если использовать preg_match, то мы не найдем все вхождения, а лишь только первое.

Выбор в какой ситуации какую функцию использовать довольно простой. Нужно заменить — используем replace, как в случае когда нам нужно было удалить ненужные части кода страницы, помните?

$page = preg_replace("/^]/i", "", $page); $page = preg_replace("/^]/i", "", $page); $page = str_replace("", "", $page);

Первый параметр функции — регулярка, определяющая Что мы ищем. Второй — на что заменяем. Третий — Где ищем. Следовательно, здесь мы брали переменную $page и присваивали ей результат функции preg_replace где искали все input type=checkbox, а также открывающиеся и закрывающиеся label. Заменяли их на », то есть просто удаляли. Надеюсь тут все ясно. К разбору самого выражения (первого параметра функции) мы перейдем чуть позже.
Был и пример использования preg_match_all, который пригодился для поиска всех ссылок в оставшемся тексте. Ссылки нам тогда понадобились потому, что именно в них были заключены ключевые слова, которые мы парсили. Вот что было:

Preg_match_all("/]+?>(.*?)<\/a>/uis",$page,$ok); for ($j=0; $j".$ok[$j].""; }

Первым параметром опять же является регулярка, чтобы найти все ссылки, которые, естественно заключены в тег «a» (если не дружите с html разметкой, то почитайте ). Второй — переменная в которой содержится текст, по которому будет происходить поиск. Третьим параметром поставлена переменная, в которую помещается результат — $ok. После этого лишь остается пройтись по всем нужным элементам $ok, чтобы достать нужные нам ключевые лова. Отдельно нужно сказать, что на выходе мы получаем многомерный массив. Именно поэтому мы выводили его таким сложным способом: $ok[$j]. Чтобы посмотреть структуру массива воспользуйтесь функцией ниже и вы все поймете.

Print_r($ok);

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

Как же писать регулярки

Для начала разберем основные конструкции. У выражений есть опции. Они задаются одной буквой и пишутся в конце, перед ними ставится слеш.

Кроме этого поддерживаются следующие метасимволы:

Метасимволы, в свою очередь, могут иметь модификаторы:

Что же, теперь можем перейти к разбору наших регулярок из прошлого урока. Опираясь на таблички выше попробуем понять, что же у нас есть. Вот выражение:

/^]/i

Первый и последний слеши «/» показывают, что внутри них идет регулярное выражение. При этом, после последнего мы поставили «i», это опция, как в первой таблице — не учитывать регистр. Внутри слешей сама регулярка. Она начинается со знака меньше и тега input, а также все, что идет потом, до знака точки — простой текст, который нужно искать. А вот сама точка, и символы после нее — это уже интереснее. В данном случае, конструкция «.*?» означает любую последовательность символов. То есть, если объединить просто текст и данную конструкцию, то мы выберем весь текст после первого вхождения и до конца. Чтобы остановиться нужно встретить либо закрывающийся html тег «больше», либо символ начала новой строки. Эта конструкция как раз нам и дает такую возможность:

Символы в квадратных скобках как бы соединены логическим ИЛИ. Концом является знак «больше» ИЛИ начало строки.
Вот и все выражение, в нем мы задали условие начала, середину и условие окончания. Не трудно, правда? Вот иллюстрация для пущей наглядности:

Давайте разберем еще одно, чтобы все закрепить. Им мы искали ссылки:

/]+?>(.*?)<\/a>/uis

Читаем выражение. Опять же, сначала отбрасываем слеши и опции. Флаги «uis» понятны, за исключением «u», который я не описывал — он показывает, что мы используем кодировку Юникод. Остается не так много. Началом является тег «a», который открывается, затем идет класс

который обозначает НЕ больше или меньше (открывающий и закрывающийся html теги), то есть любые символы в данном случае. К классу добавляется «+?», которые означают, что этот класс будет присутствовать 1 или большее число раз (но хотя бы 1 раз точно). И потом идет закрывающийся html тег для тега «a». Внутри ссылки есть текст, который задается группой

Ведь мы не знаем что там будет за текст, поэтому определяем такую группу. И в конце закрывающийся тег «a»:

Обратите внимание, что слеш мы экранируем с помощью обратного слеша, чтобы он воспринимался как простой текст.

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

Чаще всего регулярные выражения используются в Perl в операторах поиска и замены, таких как s// , m/ , операторах связки =~ или != и т.д. Как правило все эти операторы имеют схожие опции такие как:

Обычно все эти опции обозначают как "/x". Их можно использовать даже внутри шаблонов, используя новую конструкцию (?...)

Регулярные выражения или шаблоны (pattern) то же самое, что и regexp процедуры в Unix. Выражения и синтаксис заимствованы из свободно распространяемых процедур V8 Генри Спенсера (Henry Spencer), там же они подробно и описаны.

В шаблонах используются следующие метасимволы (символы обозначающие группы других символов) часто называемые egrep - стандартом:

Метасимволы имеют модификаторы (пишутся после метасимвола):

Во все других случаях фигурные скобки считаются обычными (регулярными) символами. Таким образом "*" эквивалентна {0,} , "+" - {1,} и "?" - {0,1}. n и m не могут быть больше 65536.

По умолчанию действие метасимволов "жадно" (greedy). Совпадение распространяется столько раз, сколько возможно, не учитывая результат действия следующих метасимволов. Если вы хотите "уменьшить их аппетит", то используйте символ "?". Это не изменяет значение метасимволов, просто уменьшает распространение. Таким образом:

Шаблоны работают так же, как и двойные кавычки, поэтому в них можно использовать `\` - символы (бэкслэш-символы):

\t - символ табуляции
\n - новая строка
\r - перевод каретки
- перевод формата
\v - вертикальная табуляция
\a - звонок
\e - escape
\033 - восьмеричная запись символа
\x1A - шестнадцатеричная
\c[ - control символ
\l - нижний регистр следующего символа
\u - верхний регистр -//-
\L - все символы в нижнем регистре до \E
\U - в верхнем -//-
\E - ограничитель смены регистра
\Q - отмена действия как метасимвола

Дополнительно в Perl добавлены следующие метасимволы:

Обратите внимание, что все это "один" символ. Для обозначения последовательности применяйте модификаторы. Так:

Кроме того существуют мнимые метасимволы. Обозначающие не существующие символы в месте смены значения. Такие как:

Граница слова (\b) - это мнимая точка между символами \w и \W. Внутри класса символов "\b" обозначает символ backspace (стирания). Метасимволы \A и \Z - аналогичны "^" и "$", но если начало строки "^" и конец строки "$" действуют для каждой строки в многострочной строке, то \A и \Z обозначают начало и конец всей многострочной строки.

Если внутри шаблона применяется группировка (круглые скобки), то номер подстроки группы обозначается как "\цифра". Заметьте, что за шаблоном в пределах выражения или блока эти группы обозначаются как "$цифра". Кроме этого существуют дополнительные переменные:

Пример:

$s = "Один 1 два 2 и три 3"; if ($s =~ /(\d+)\D+(\d+)/) { print "$1\n"; # Результат "1" print "$2\n"; # "2" print "$+\n"; # "2" print "$&\n"; # "1 два 2" print "$`\n"; # "Один " print "$"\n"; # " и три 3" }

Perl версии 5 содержит дополнительные конструкции шаблонов:

Пример:

$s = "1+2-3*4"; if ($s =~ /(\d)(?=-)/) # Найти цифру за которой стоит "-" { print "$1\n"; # Результат "2" } else { print "ошибка поиска\n"; }

(?!шаблон)- "заглядывание" вперед по отрицанию:

Пример:

$s = "1+2-3*4"; if ($s =~ /(\d)(?!\+)/) # Найти цифру за которой не стоит "+" { print "$1\n"; # Результат "2" } else { print "ошибка поиска\n"; }

(?ismx) - "внутренние" модификаторы. Удобно применять в шаблонах, где например нужно внутри шаблона указать модификатор.

Правила регулярного выражения. (regex)

  1. Любой символ обозначает себя самого, если это не метасимвол. Если вам нужно отменить действие метасимвола, то поставьте перед ним "\".
  2. Строка символов обозначает строку этих символов.
  3. Множество возможных символов (класс) заключается в квадратные скобки "", это значит, что в данном месте может стоять один из указанных в скобках символов. Если первый символ в скобках это "^" - значит ни один из указанных символов не может стоять в данном месте выражения. Внутри класса можно употреблять символ "-", обозначающий диапазон символов. Например, a-z - один из малых букв латинского алфавита, 0-9 - цифра и т.д.
  4. форум портала PHP . SU

Одна из очень мощных и полезных возможностей языка PHP - поддержка регулярных выражений. Многих программистов, как начинающих, так и довольно опытных, пугает внешняя сложность и запутанность языка регулярных выражений. Но могу вас уверить - это того стоит. Применение регулярных выражений существенно облегчает работу по обработке текстов и слабо структурированных данных.


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


Я думаю, вы неоднократно сталкивались с ситуациями, когда у вас есть текст (например, в Microsoft Word) и вам надо найти в нём что-то важное. Если вы знаете, что именно ищете - всё просто: вызвали диалог поиска, ввели искомое слово, нажали кнопку и вуаля - текст найден.


Но что вы будете делать, если вы заранее знаете только тип искомой информации? Например, перед вами стоит задача найти все адреса электронной почты в документе на пару сотен листов. Некоторые будут просматривать документ вручную, некоторые - введут в поиске собаку (@) и будут искать её. Согласитесь - оба вариата это каторжный неблагодарный труд.

Вот тут-то на выручку приходят регулярные выражения. В некотором приближении регулярные выражения можно сравнить с масками или шаблонами, которые накладываются на текст: если текст соответствует маске - значит это искомый фрагмент. Но перед тем как рассматривать применение регулярных выражений, мы познакомимся с их синтаксисом.

Регулярное выражение - это текстовая строка, составленная по определённым законам и правилам. Строка состоит из символов и групп символов, метасимволов, квантификаторов и модификаторов.

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

// читаемые символы a Е // нечитаемые символы и коды \x41 - то же что буква "A" \x09 - символ табуляции

Группа символов - это несколько символов, записанные последовательно:

Абвг ACZms

Сразу обращаю ваше внимание - "пробел" в регулярных выражения тоже рассматривается как значимый символ, поэтому при написании выражений будьте внимательны. Например, эти граппы символов являются РАЗНЫМИ выражениями:

АБВГДЕ АБВ ГДЕ

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

Метасимволы для задания специальных символов
() Скобки. Определяют вложенные выражения.
| Метасимвол выбора
^ Метасимвол начала строки
$ Метасимвол конца строки
\n Символ перевода строки (шестнадцатеричный код 0x0A)
\r Символ возврата каретки (шестнадцатеричный код 0x0D)
\t Символ табуляции (шестнадцатеричный код 0x09)
\xhh Вставка символа с шестнадцатиричным кодом 0xhh, например \x42 вставит латинскую букву "B"
Метасимволы для задания групп символов
. Точка. Любой символ.
\d Цифра (0-9)
\D Не цифра (любой символ кроме символов 0-9)
\s Пустой символ (обычно пробел и символ табуляции)
\S Непустой символ (все, кроме символов, определяемых метасимволом \s)
\w "Словарный" символ (символ, который используется в словах. Обычно все буквы, все цифры и знак подчеркивания ("_"))
\W Все, кроме символов, определяемых метасимволом \w

Метасимволы из второй половины таблицы очень легко запомнить. "d" - digit (цифра), "s" - symbol (символ), "w" - word (слово). Если буква большая - значит надо добавить "НЕ" в описанию группы.

Возьмём для примера текст "На красной майке цифры 1812, а на зелёной майке - 2009". Рассмотрим примеры простейших регулярных выражений:

\d\d\d\d - найдёт 1812 и 2009 \D - найдёт все буквы, пробелы и знаки препинания \s - найдёт все пробелы в тексте.

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

Означает любую цифру (то же, что \d) - означает чётную цифру - обозначает любой символ латниского алфавита (в любом регистре) или цифру.

Например, выражение \d\d\d в тестовой строке найдёт только 1812, но не 2009. Это выражение следует читат как "найти все последовательности из четырёх цифр, где последняя цифра равна 0,2,4,6 или 8".

Нам осталось упомянуть лишь квантификаторы и модификаторы.

Квантификатор - это специальная конструкция, определяющая, сколько раз должен встретиться символ или группа символов. Квантификатор записывается в фигурных скобках "{}". Возможны два формата записи: точный и диапазонный. Точный формат записывается так:

Здесь Х - это количество раз, которое должен повториться предшествующий символ или группа. Например выражение

Вторая форма записи - диапазонная. Записывается как

{X, Y} // или {,Y} // или {X,}

где X - минимальное, а Y - максимальное количество повторений. Например:

читается как "от двух до четырёх последовательно записанных цифр". Если одна из границ не указана, то подразумевается отсутствие ограничения. Например:

\w{3,} - три и более букв. \d{,5} - цифр нет вообще, либо есть, но не более пяти.

Квантификаторы могут применяться как к одному символу, так и к группе:

[ А-Яа-я ]{1,3}

Эта конструкция выберет из текста все русские слова из одной, двух или трёх букв (например, "или", "не", "я", "иду" и т.п.)

Кроме фигурных скобок с уществует ещё три метасимвола-квантификатора: "*" (звёздочка), "+" (плюс) и "?" (вопрос). Их испльзуют в случаях, когда заранее неизвестно минимальное и максимальное количество необходимых повторений. Например, при поиске адресов электронной почты нельзя заранее сказать, сколько символов будет в имени пользователя (до "собаки"), а сколько - в имени домена (после "собаки").

Метасимвол "*" читается как "любое количество от нуля и более", т.е. конструкция

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

Символ "+" отличается от звёздочки лишь тем, что требует наличия хотя-бы одного символа. Т.е. конструкция

соответствует любой цифровой последовательности, где цифр одна или более.

Символ "?" соответствует отсутствию или наличию единственного символа. Т.е. конструкция

соответствует любой цифровой последовательности, где цифр одна или две.

Здесь стоит упомянуть о такой особенности антификаторов "*" и "+" как жадность . Суть в том, что по-умолчанию эти символы соответствуют максимально длинной последовательности символов. Например, для строки "мама мыла раму" выражение:

выберет "мама мыла ра", что несколько неожиданно, ведь мы предполагали получить "ма". Для изменения такого поведения используется метасимвол "?" (знак вопроса), записанный сразу после квантификатора. Он органичивает "аппетит" квантификаторов, заставляя их возвращать первое совпадение, а не самое длинное. Теперь изменим предыдущий пример:

и получим требуемое совпадение "ма".

Последний элемент языка - модификаторы . Модификатор - это спецсимвол, определяющий "системные" параметры анализа регулярных выражений. Таких символов всего четыре, они могут применяться как по отдельности, так и одновременно:

i Включает режим case-insensitive, т.е. большие и маленькие буквы в выражении не различаются.
m Указывает на то, что текст, по которому ведется поиск, должен рассматриваться как состоящий из нескольких строк. По умолчанию механизм регулярных выражений рассматривает текст как одну строку вне зависимости от того, чем она является на самом деле. Соответственно метасимволы "^" и "$" указывают на начало и конец всего текста. Если же этот модификатор указан, то они будут указывать соответственно на начало и конец каждой строки текста.
s По умолчанию метасимвол "." не включает в свое определение символ перевода строки. Т.е. для многострочного текста выражение /.+/ вернет только первую строку, а не весь текст, как ожидается. Указание этого модификатора снимает это ограничение.
U Делает все количественные метасимволы "не жадными" по умолчанию. В некоторых модификациях языка (в частности в PHP) вместо "U" используется символ "g", более соответствующий смыслу ("g" - сокращение от английского "greedy", "жадный").

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

Регулярные выражения в PHP.

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

int preg_match (string pattern, string subject [, array matches])

Функция проверяет, совпадает ли содержимое subject с шаблоном pattern. Возвращает 1, если совпадения найдены, иначе возвращает 0. Если указать необязательный параметр-массив matches, то при выполнении функции в него будут занесен единственный элемент - первое найденное совпадение.

"; print_r($found); ?>

int preg_match_all (string pattern, string subject, array matches [, int order])
Функция идентична предыдущей, с единственным отличием - она производит поиск по всему тексту и возвращает в массиве matches ВСЕ найденные совпадения.
mixed preg_replace (mixed pattern, mixed replacement, mixed subject [, int limit])
Как и обе предшествующие функции, preg_replace производит поиск фрагмента текста, соответствующего шаблону. Все найденные фрагменты функция заменяет на указанный в параметрах текст. До очистки:\n$text\n\n"; $text = preg_replace("/(\n \s{2,})/"," ",$text); echo "После очистки:\n$text"; // выведет текст, очищенный от спецсимволов // и лишних пробелов?>
mixed preg_replace_callback (mixed pattern, mixed callback, mixed subject [, int limit])
Функция является расширенной версией предыдущей. Главное отличие - этой функции в параметрах передаётся имя функции, которая будет анализировать текст и формировать замещающий текст.
array preg_split (string pattern, string subject [, int limit [, int flags]])
Эта функция аналогична функциям explode() и split(). Её особенность в том, что в качестве разделителя выступает не фиксированная строка, а регулярное выражение. Функция разбивает исходные данные на элементы и помещает их в выходной массив.
array preg_grep (string pattern, array input)
Функция предназначена для регулярного поиска в массивах. Для поиска задаётся шаблон и массив входных данных, а возвращается массив, состоящий только из элементов, соответствющих шаблону.

Рассмотренный список функций далеко не полон, но вполне достаточен для успешного начала работы с регулярными выражениями. Если вы заинтересовались этой темой - обязательно почитайте дополнительную литературу (например, книгу Фридла "Регулярные выражения"). Кроме того, в целях обучения рекомендую поставить одну из специальных программ для тестирования регулярных выражений (например, "PCRE" или "RegEx Builder").

В данной статье предоставлена подборка php regexp примеров. Очень хорошая и полезная коллекция примеров регулярных выражений (regular expressions). Все примеры регулярных выражений приемлемы для PHP. Пользуйтесь на здоровье!

Пример проверки доменного имени

Данный, php сниппет проверяет, является ли строка допустимым доменным именем.

?:.*)+):?(d+)?/?/i", $url)) { echo "Your url is ok."; } else { echo "Wrong url."; }

Пример подсветки слова в тексте

Очень полезное регулярное выражение, для поиска и подсветки нужного слова в тексте. Особенно код полезен, при создании вывода результатов поиска.

$text = "Sample sentence from KomunitasWeb, regex has become popular in web programming. Now we learn regex. According to wikipedia, Regular expressions (abbreviated as regex or regexp, with plural forms regexes, regexps, or regexen) are written in a formal language that can be interpreted by a regular expression processor"; $text = preg_replace("/b(regex)b/i", "1", $text); echo $text;

Пример реализации подсветки результатов поиска у WordPress

Откройте файл search.php и найдите функцию the_title(). Замените ее следующей строкой:

Echo $title;

А теперь, перед замененной строкой вставьте этот код:

\0", $title); ?>

Сохраните ваш файл search.php и откройте style.css. Добавьте в него следующую строку:

Strong.search-excerpt { background: yellow; }

Пример получения изображений из HTML методом regexp

Данный кусок php кода использующий регулярные выражения, ищет все изображения и адрес url к ним.

$images = array(); preg_match_all("/(img|src)=("|")[^"">]+/i", $data, $media); unset($data); $data=preg_replace("/(img|src)("|"|="|=")(.*)/i","$3",$media); foreach($data as $url) { $info = pathinfo($url); if (isset($info["extension"])) { if (($info["extension"] == "jpg") || ($info["extension"] == "jpeg") || ($info["extension"] == "gif") || ($info["extension"] == "png")) array_push($images, $url); } }

Удаление повторяющихся слов (без учета регистра)

Часто встречаются слова, которые повторяются? Тогда пример этого регулярного выражения будет вам полезным.

$text = preg_replace("/s(w+s)1/i", "$1", $text);

Удаление повторяющихся точек

То же самое, только с повторяющимися точками.

$text = preg_replace("/.+/i", ".", $text);

Соответствие XML / HTML тегов

Эта простая функция принимает два аргумента: тег (соответствия которому вы хотите найти), xmlили html код.

Function get_tag($tag, $xml) { $tag = preg_quote($tag); preg_match_all("{<".$tag."[^>]*>(.*?)."}", $xml, $matches, PREG_PATTERN_ORDER); return $matches; }

Поиск XHTML/XML тегов с определенными значениями атрибутов

Этот пример похож на предыдущую функцию, только вы можете значительно расширить поиск например найти

.

Function get_tag($attr, $value, $xml, $tag=null) { if(is_null($tag)) $tag = "\w+"; else $tag = preg_quote($tag); $attr = preg_quote($attr); $value = preg_quote($value); $tag_regex = "/<(".$tag.")[^>]*$attr\s*=\s*". "(["\"])$value\\2[^>]*>(.*?)<\/\\1>/" preg_match_all($tag_regex, $xml, $matches, PREG_PATTERN_ORDER); return $matches; }

Поиск шестнадцатеричных значений цвета

Отличный пример регулярного выражения, который ищет соответствия шестнадцатеричных значений цвета в заданных строках. Для чего это? Может быть, вы хотите написать сервис по сжатию CSS кода, или что-то подобное.

$string = "#555555"; if (preg_match("/^#(?:(?:{3}){1,2})$/i", $string)) { echo "example 6 successful."; }

Пример поиска title на заданной странице

Этот интересный пример PHP кода с regexp ищет и возвращает текст между тегами и .

Feof($fp)){ $page .= fgets($fp, 4096); } $titre = eregi("(.*)",$page,$regs); echo $regs; fclose($fp);

Парсинг лога Apache

Большинство сайтов работают на известных серверах Apache. Если ваш сайт также работает на нем, то можно сделать парсинг лога сервера с помощью php regexp.

//Logs: Apache web server //Successful hits to HTML files only. Useful for counting the number of page views. "^((?#client IP or domain name)S+)s+((?#basic authentication)S+s+S+)s+[((?#date and time)[^]]+)]s+"(?:GET|POST|HEAD) ((?#file)/[^ ?"]+?.html?)??((?#parameters)[^ ?"]+)? HTTP/+"s+(?#status code)200s+((?#bytes transferred)[-0-9]+)s+"((?#referrer)[^"]*)"s+"((?#user agent)[^"]*)"$" //Logs: Apache web server //404 errors only "^((?#client IP or domain name)S+)s+((?#basic authentication)S+s+S+)s+[((?#date and time)[^]]+)]s+"(?:GET|POST|HEAD) ((?#file)[^ ?"]+)??((?#parameters)[^ ?"]+)? HTTP/+"s+(?#status code)404s+((?#bytes transferred)[-0-9]+)s+"((?#referrer)[^"]*)"s+"((?#user agent)[^"]*)"$"

Пример проверки сложности пароля

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

"A(?=[-_a-zA-Z0-9]*?)(?=[-_a-zA-Z0-9]*?)(?=[-_a-zA-Z0-9]*?)[-_a-zA-Z0-9]{6,}z"

Замена текстовых смайликов на графические смайлики

Данный пример кода будет менять текстовый смайлик, на ваш графический. Интересный и полезный php сниппет.

$texte="A text with a smiley:-)"; echo str_replace(":-)","",$texte);

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

Стоит сказать, что данный php код используется в wordpress, для поиска и обработки изображений.

post_content; $szSearchPattern = "~]* />~"; // Run preg_match_all to grab all the images and save the results in $aPics preg_match_all($szSearchPattern, $szPostContent, $aPics); // Check to see if we have at least 1 image $iNumberOfPics = count($aPics); if ($iNumberOfPics > 0) { // Здесь вы можете обрабатывать ваши изображения // В данном примере они просто выведутся на монитор for ($i=0; $i < $iNumberOfPics ; $i++) { echo $aPics[$i]; }; }; endwhile; endif; ?>

Надеюсь, вам была полезна подборка примеров php regexp. Если есть интересные дополнения или примеры регулярных выражений (php), пишите в комментариях.

КУЛЬТУРА

Программы для работы с документами офисного типа: краткий обзор

Программы для работы с документами офисного типа: краткий обзор

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

Как восстановить удаленные фото на смартфонах Андроид – и как

Удаленные файлы со смартфона или планшета невозможно вернуть с помощью встроенных функций гаджета. Для этих целей существуют специальные программы, но и они не гарантируют 100% успех, хотя шансы...
Бескорыстно копию сообщения

Бескорыстно копию сообщения

Здравствуйте. Сегодня я расскажу еще об одной интересной штуке, которая поможет сделать полный бэкап смс-сообщений на Вашем смартфоне или планшете. Скажу сразу, что данное пособие по бэкапу...
Квадрокоптер xiaomi mi drone

Квадрокоптер xiaomi mi drone

Компания Xiaomi успела зарекомендовать себя как производителя одних из наиболее производительных и функциональных смартфонов на рынке по доступной цене. Прочно заняв свою нишу, компания не так...
Новые привилегии на AliExpress или что такое уровневая система А0-А1-А2-А3-А4?

Новые привилегии на AliExpress или что такое уровневая система А0-А1-А2-А3-А4?

Уже довольно давно на Алиэкспресс действует система рейтингов покупателей. Она работает иначе, нежели у продавцов. Если у последних по рейтингу можно судить о надежности, то у покупателей он дает...
Расширение файла ESP Расширение esp

Расширение файла ESP Расширение esp

То на вашем компьютере могут присутствовать файлы формата ESP. Но вот открыть их или редактировать будет не так-то просто. Важно сначала понять, для чего они и какую функцию выполняют.Файл с...
PS Vita или PS Vita Slim: отличия моделей, сравнение характеристик

PS Vita или PS Vita Slim: отличия моделей, сравнение характеристик

PS Vita, а точнее первая ее версия, вышла достаточно давно – в конце 2011 у японцев, которым на это везет всегда больше и в начале 2012-го в Америке и Европе. Vita стала заменой морально устаревшей...
Настройка Mi Band – подробное описание приложения Mi Fit Инструкция по эксплуатации xiaomi mi band

Настройка Mi Band – подробное описание приложения Mi Fit Инструкция по эксплуатации xiaomi mi band

Детальный обзор браслета Xiaomi Mi Band 2 с сайта CAFAGO, в котором я покажу, как настроить уведомления о звонках с отображением имени звонящего кириллицей на телефонах на базе IOS, пробегусь по...
Современный МакБук: что это такое?

Современный МакБук: что это такое?

MacBook - это ноутбук производства Apple с характерным логотипом в форме яблока. Ноутбуки этой серии отличаются уникальным дизайном, нехарактерным для типичных ноутбуков, высокой ценой, высокой...
Что такое расширение файла FX?

Что такое расширение файла FX?

Описание Помощь FX File Explorer - новое приложение имеет новый качественный интерфейс, который стал ещё проще и удобнее. Появились новые уникальные варианты обмена между другими смартфонами и...