Шпаргалка: регулярные выражения

Недавно я поучавствовал в одном "интересном" проекте связанным с парсингом контента. К сожалению simple_html_dom не мог мне помочь в этом. Цепляться было очень сложно. И пришлось юзать регулярки.

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

В нете много статей и написанны они на гуманоидном языке (хотя у меня не лучше получилось, но мы все можем обсудить в коментах). И мне было сложно. ОЧЕНЬ!!! Ведь регулярка по сути сложновата для новичков. Сложно читать эти иероглифы. Пришлось воспользоваться проверенной и подходящей мне формулой: видеотуториалы на русском и английском. Это не реклама, а просто совет. Я смотрел вебинар от pr-of-it.ru и потом для закрепления от lynda.com.

Я не буду расписывать про регулярки. Посмотрите их видосы. Ну... Вы ведь знаете где их скачать =) Они не большие. Там довольно таки кратко, но толково все наглядно показанно. А в этой статье опишу небольшую шпаргалку.

И первое с чего начну, так это сайт для проверок ваших регулярок: https://regex101.com/


/* основные php функции */

// заменить в $string на $patterns вместо $replacements
$result = preg_replace($patterns, $replacements, $string);

// найти соответствие: найти $search в $string и записать результат в $result
preg_match($search, $string, $result);

// разбить $string по составляюшим $search
$result = preg_split($search, $string);

preg_match('~cat~', 'It rains cats and dogs', $result);

/* квантификатор: сколько раз может повторяться символ */
{5} - пять символов
{1,4} - от 1 до 4
{2,} - минимум 2
{0,} - сколько угодно символов, но может быть и ниодного
{1,} - сколько угодно символов, но как минимум 1

~ca{1,2}t~  // найдет: cat или caat

/* символьный класс [] */

[a-zA-Z0-9]
[ab] - либо А либо Б
[0-9]
[a,b,c]

~cat[0-9]~  // найдет: cat1
~cat[0-9]+~  // найдет: cat1 или cat12 или cat123 и тд.
~cat[0-9]{3}~  // найдет: cat123

[a-z]* - сколько угодно символов, но может быть и ниодного
[a-z]+ - сколько угодно символов, но как минимум 1
[a-z]? - либо ниодного, либо 1

// знаки препинания, арифметические знаки ставятся перед перечисляемыми символами
[-,ag] - указали что в переборе учавствуют 'минус' и 'запятая'

// отрицание
[^wert] - все символы кроме символов w e r t

/* спецсимволы */
\s - это пробел или табуляция
\S - это все, кроме пробела или табуляции
\w - это все буквы и нижнее подчеркивание [a-zA-Z_]
\W - это все кроме букв и нижнего подчеркивания [^a-zA-Z_]
\d - это все цифры
\D - это все кроме цифр

/* работа с группами символов */

чтоб использовать группу символов(искать по группе символов), то эту группу нужно заключить в ()
(qwerty) // ищем целиком qwerty

// выборка по условию
для того чтобы выбрать или одно значение или другое значение, то ставится |
(be)|(notbe) // тут мы делаем поиск по совпадению или be или notbe
(a|b) а или b

/* якоря */

//!!! важно. нужно использовать указание на начало строки ^ и на конец строки $ , а так же использовать ограничители /
/^[a-zA-Z]+$/

/* подмаски */
строка: It rains cats and dogs
~It (\w+)~ // вернет: It rains
~It (\w+) (\w+)~ // вернет: It rains cats

!! если нужно отбросить часть от соответсвия
~It (\w+) (?:\w+)~ // захватиться строка It rains cats , но вернет нам только It rains

!! если нужно задать имя подмаске
~It (?P\w+) (?P\w+)~
в этом случае мы получим ['name1' => 'rains', 'name2' => 'cats']

!! сылка на подмаску
~Сшит (?P\w+) не по-(?P=name1)овски~

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


Добавить коментарий

Что за сайт

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

ФРЕНДЗОНА

Будь в курсе

Интересненько

Поехали