Как понять регулярные выражения?

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

Буду благодарен за ссылки на мануалы, спасибо.

P.S. читал также разномастные статьи, но к сожалению, их авторы не затруднились написать хотя бы пару-тройку примеров и разобрать их
  • Вопрос задан
  • 3047 просмотров
Решения вопроса 2
Пригласить эксперта
Ответы на вопрос 7
@ugodrus
Евгений Петров, я бы даже остановился на Джеффри Фридл Регулярные выражения. Книги с использованием слова "рецепты" на мой взгляд бесполезны. Очень скудное содержание чаще всего.
Для общего понимания первой достаточно. А что касается применения, то в каждой среде есть свои особенности применения регулярных выражений. Так что вопрос практики - основной. Если автор хочет освоить регулярники например под PHP, то есть замечательный тестер. Сам на нём кучу регулярников тестировал и собирал.
Ответ написан
@endemic
Можно начать с википедии и попробовать сделать примеры онлайн )

en.wikipedia.org/wiki/Regular_expression
www.regexr.com

Насчет понимания смысла регулярки: это уже приходит с определенным опытом. И если смысл регулярки типа /d{1,4} понять легко, то смысл стандартной регулярки для проверки адреса почты понять сможет только терминатор :)
Ответ написан
Их не нужно понимать, ты просто читаешь их.
Очень просто.

Есть ограничители
^ - начало строки
$ - конец строки
| - символ "или" - используется между символами или группами, чтобы показать "или то или другое"
Выглядит так:
/^(([a-z]+)|([а-я]+))$/
читается как строка, состоящая из любого количества букв от a до z (английских маленьких букв) или любого количества русских букв, не включая ё, на выходе будет три выборки - первая - вся строка, вторая строка из английских букв, третья - строка из русских.

Но конкретно этот код еще может быть переписан так:
/^([a-zа-я]+)$/
Поскольку нет смысла разделять русские и английские в отдельные группы. Так просто короче и легче.

Есть символы
. - это "точка". любой символ, не включая совсем некоторых типа табуляций, переносов строк разных там
\w - это слово - вот прям любая конструкция из любого количества букв
(есть другие разные)

Есть количественные знаки
.* - звездочка означает или есть, или нет, в любом количестве
.+ - плюс - обязательно есть, хотя бы одна "точка"
.{2,} - от двух и до бесконечности "точек"
.{2,5} - от двух и до пяти "точек"

Есть шаблоны
[a-zA-Z] - любая английская буква. просто же?
[a-яА-ЯёЁ] - любая русская буква
[?!] - вопрос или восклицательный знак

Есть группы
([a-z][a-z]) - группа состоящая из двух букв. каждая из которых в промежутке между a-z английскими
Группы от шаблонов отличаются тем, что они захватываются твоим поиском. Ты ведь не забыл, что регулярка - это в первую очередь ПОИСК?

Есть модификаторы
/([a-z][a-z])/gi - g(global), i(ignorcase) - глобал означает искать во всем тексте не учитывая переносы строк, если не поставить - будет искать только в пределах одной строки, ignorcase - позволит не указывать большие буквы
/([a-z][a-z])/gu - g(global), u(utf-8) - утф8 позволит корректно работать с русскими буквами в utf-8 кодировке, частая проблема на форумах
Ответ написан
@dan-ver
какой язык программирования?
Ответ написан
@atrian
Для совсем новичков рекомендую запись вебинара
prog-school.ru/2014/09/zapis-vebinara-regulyarnye-...

Хорошо объясняют основы, после просмотра для меня регулярки перестали быть черной магией и стало понятно куда копать дальше :)
Ответ написан
Bambr
@Bambr
Плюсую Фриддла. Даже тем, кто уже с регулярками уже познакомился, эта книга может очень хорошо перестроить мозги.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
16 июн. 2019, в 09:46
10000 руб./за проект
16 июн. 2019, в 09:39
75000 руб./за проект
16 июн. 2019, в 09:34
1000 руб./за проект