Введение
Немного Википедийного:
Регулярные выражения — формальный язык, используемый в компьютерных программах, работающих с текстом, для поиска и осуществления манипуляций с подстроками в тексте.
Для проверки своих регулярок и экспериментов советую использовать очень удобный сайт: https://regex101.com/
Специальные символы
Перейдем к базовым элементам для составлений простейших выражений. Спец символы:
- . - соответствует одному любому символу;
- \d - соответствует любой цифре от 0 до 9;
- \D - любой символ, исключая цифровой;
- \w - любой один буквенный, цифровой или знака подчеркивания;
- \W - любой кроме буквенного, цифрового или знака подчеркивания;
- \s - пробельный символ;
- \S - любой символ кроме пробельного;
- \b - граница слова. Например, вы можете отсортировать все строки оканчивающиеся на .ru
- ^ и $ - начало и конец строки соответственно.
Повторения
- ? - ноль или одно повторение предыдущего токена (спец символа, группы, символьного класса). Может быть полезным, например, при поиске упоминаний переменной в коде;
- * - ноль или более повторений предыдущего токена;
- + - одно или более повторений предыдущего токена;
- {N, M} - диапазон в котором предыдущий токен должен повторяться, причем допускается не указывать N (тогда будет считаться от 0 до N) и M (от N до бесконечности повторений).
Группы
Символы заключенные в круглые скобки составляют группу. Группе можно задать имя (?P<ИМЯ_ГРУППЫ>). Пример:
Имена групп не могут повторяться. Использование имен групп является полезной практикой при использовании больших регулярных выражений в вашей программе, так как вам не придется менять код каждый раз когда меняется порядок/количество групп.
Примечание: P ключ для ЯП Python, указывающий ему, что мы даем имя группе (если брать документацию языка). Что в PHP, что в Perl не встретил проблем использования ?<> и ?P<>. Так как я пишу регулярные под Python, то и дальнейшие примеры будут с ?P<>
Символьный класс
Символьный класс представляет собой набор символов заключенных в квадратные скобки. Грубо говоря, любой из токенов, заключенных в скобки, будет захвачен из текста.
Или
| - еще один очень полезный специальный символ обозначающий "или". Допустим мы ищем конкретное слово с конкретными окончаниями, например собака. Хочу найти всех собак с окончаниями "ка" и "чка", тогда выражение будет соба(ка|чка).