Программирование для тех кто хотел бы его изучить часть 4. Погружение в ад. Регулярные выражения. Ч1

Доброго дня пикабушники!
Давайте научимся писать регулярные выражения. Многим покажется это странным, ведь "эй чувак, я не писал кода а ты уже с регулярками! Это нечестно!". Не волнуйтесь, и успокойтесь. Вдохните и выдохните. Регулярные выражения помогут сис. админам, и программистам. Более того, другой программист с 50% случаев нихрена не поймет что вы написали и вы сможете гордо выкрикнуть "БДЫЩЬ! МАГИЯ!".
Для чего нужны регулярки?
Для поиска и замены текста, например, можно составить шаблон на основе слова и мыслеформы. Например: "кот", выкинув такие слова из поиска, как котлета, котлован, терракотовый. Оставив "котейка", "котенок", "котофей", "котейкин", можно заменить всякие слова котами, итд.
Принцип регулярных выражений:
Вообще, трудно объяснить регулярки людям которые не знают алгебру-логику и не решали задачки на Машины Тьюринга. Если вы представляете как работает перфолента (та что с "дырочками"), то вы легко войдете в мир регулярных выражений.
Так что если вы технарь пропускайте смело несколько абзацов и начинайте читать примеры кода.
Если вы ничего не знаете о перфолентах и алгебре-логике, то сейчас лучше бы вам сконцентрироваться.
Применение регулярок на практике, где я могу их использовать?
простые выражения используются для проверки E-mail на web страницах, проверки команд через терминал konsole (в KDE), автозаполение формы поиска, так же регулярки используют для парсинга текста, автозамены текста, проверок записей в БД (базы данных) от ВНЕЗАПНЫХ ошибок.
Почему?
Почти все актуальные языки поддерживают регулярные выражения, регулярные выражения свободны от так строковых переменных, у громоздких языков, например у С# достаточно большие проблемы со строками (сложение строк, вычитание, сортировка в строке итд итд). Можно извращаться циклами, stringbuilder-ами, а можно быстро написать регулярку.
для чего НЕ используются регулярные выражения?
*Для парсинга HTML - во первых это плохой стиль. Во вторых за вами придет сатана, когда вы в будете беззащитны (например засыпать у себя дома в своей любимой пижамке), он подкрадется к вам и сделает что-то ужасное.
*Для очевидных решений - если вы ЗНАЕТЕ что интересующая вас подстрока в строке начинается с какого то там символа, и вы абсолютно уверены в количестве символов в подстроке. Например взять слово "кот":
Мой кот пытался поймать мышку
Мой кот сожрал мои наушники
тут слово "кот" начинается после 4 символа (пробелы считаются) и слово в 3 символа.
То есть вам надо вытащить 3 символа после 4 символа т.е. слово "кот".
Начинаем безумие.
ВНИМАНИЕ!
Нельзя вот так взять и написать 1 регулярку для всего-всего. Скорее всего вам понадобится дюжина выражений.
Выборка слов.
Итак есть строка:
Котейка на когтеточке выдавал нам песни группы Ария
Вывод всех слов [а-яА-Я]+ (исключая пробелы и др символы), или так S+ (укороченная запись, не рекомендую пользоваться ей, сломаете себе голову при отлаживании)
[а-яА-Я] - множество символов которые имеются в нашем слове, черточка - означает "от и до".
+ - означает, что соотвествие должно быть хотя бы одно.
Переведу на руссий язык:
Пожалуйста, найди мне слова в предложении:
Котейка на когтеточке выдавал нам песни группы Ария
где есть символы "строчные русские буквы" и "большие русские буквы", группируй символы до тех пор, пока не встретится спец.символ "пробела".
соотвественно [a-zA-Z]+ уже английские символы [0-9]+ цифры.
Подождите? А что если мне нужны только символы, которые встречаются не по порядку, а скажем например мне нужны символы, а и я? решение просто просто пишите [ая]+ без черточек. что если мне нужен пробел? [ ]+ числа от 0 до 9 и пробел? [ 0-9]+
Выделение слова:
Допустим нам надо найти слово Ария
Котейка на когтеточке выдавал нам песни группы Ария
А[а-я]+
Мы знаем, что первая буква А, далее мы просто читаем все оставшееся до символа "пробел" или до конца строки (если буква я - последняя в строке)
Итак попробуйте простые регулярные выражения:
он-лайн http://www.pcre.ru/eval/ (для языков программирования могут быть внесены ограничения, которые немного урезают регулярки)
В следующем уроке, я постараюсь объяснить выражения, рассказать о циклах, спецсимволах, и группировании символов.
Все вопросы в комментариях.
Специально для пикабу.
PS За ошибки не ругаем я не Маяковский.