[ Полезный рекламный блок ]
Попробуйте свои силы в игре, где ваши навыки программирования на C# станут решающим фактором. Переходите по ссылке 🔰.
У цій статті ми розглянемо найпоширеніші приклади регулярних виразів, які можуть бути корисними вам для вирішення завдань.
Матеріал цієї статті буде доповнюватися на регулярній основі.
Якщо вам необхідний приклад регулярного виразу, залишайте коментар до цієї статті, в якому опишіть проблему.
Наприкінці коментаря залиште вашу емейл адресу. Щойно статтю буде доповнено вирішенням вашої проблеми, ми сповістимо вас на емейл адресу.
Поточний список регулярних виразів такий:
Перевірка email адреси
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
static void Main() { string pattern = "^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$"; /* Или так: string pattern = @"^(?("")(""[^""]+?""@)|(([0-9a-z]((.(?!.))|[-!#$%&'*+/=?^`{}|~w])*)(?<=[0-9a-z])@))" + @"(?([)([(d{1,3}.){3}d{1,3}])|(([0-9a-z][-w]*[0-9a-z]*.)+[a-z0-9]{2,17}))$"; */ string email = "alex@gmail.com"; if (Regex.IsMatch(email, pattern, RegexOptions.IgnoreCase)) { Console.WriteLine("Корректный email адрес"); } else { Console.WriteLine("Некорректный email адрес"); } } |
Пояснення:
- ^ – збігається з початком рядка
- [a-zA-Z0-9._%+-]+ – відповідає одному або декільком символам із набору літер (як великих, так і малих), цифр і спеціальних символів ., _, %, + и –
- @ – відповідає символу @
- [a-zA-Z0-9.-]+ – відповідає одному або декільком символам із набору літер (великих і малих), цифр і спеціальних символів ., _, %, + и -.
- . – відповідає символу . (екранованому зворотною косою рискою)
- [a-zA-Z]{2,} – збігається з двома або більше буквами (як великими, так і малими)
- $ – збігається з кінцем рядка
Перевірка пароля
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
static void Main() { string pattern = @"^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[^a-zA-Z0-9])S{1,16}$"; while (true) { Console.WriteLine("Введите пароль"); string password = Console.ReadLine(); if (Regex.IsMatch(password, pattern, RegexOptions.IgnoreCase)) { Console.WriteLine("Пароль подтвержден"); break; } else { Console.WriteLine("В пароле должна быть минимум одна цифра, одна буква(английская), большая буква и любой знак, " + "который не цифра и не буква, максимальная длина пароля 16 символов."); } } } |
Розглянемо другий варіант:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
static void Main() { string pattern = @"^(?=.*[A-Z])(?=.*[a-z])(?=.*d)(?=.*[^da-zA-Z]).{8,}$"; string password = "qwerty"; if (Regex.IsMatch(password, pattern, RegexOptions.IgnoreCase)) { Console.WriteLine("Пароль подтвержден"); } else { Console.WriteLine(""" Укажите пароль, следуя инстуркциям: Минимальная длина 8 символов Хотя бы одна заглавная буква Хотя бы одна строчная буква Хотя бы одна цифра Хотя бы один специальный символ """); } } |
Пояснення:
- ^ : початок рядка
- (?=.*[A-Z]) : позитивне випередження для забезпечення наявності в рядку хоча б однієї великої літери
- (?=.*[a-z]) : позитивне випередження, щоб переконатися, що в рядку є хоча б одна мала літера
- (?=.*d) : ппозитивне випередження, щоб переконатися, що в рядку є хоча б одна цифра
- (?=.*[^da-zA-Z]) : позитивне випередження, щоб переконатися, що в рядку є хоча б один спеціальний символ .{8,} : збіг із будь-яким символом (крім нового рядка) не менше 8 разів
- $ : кінець рядка
Перевірка номера телефону
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
static void Main() { string pattern = @"^((+)?b(8|38)?(0[d]{2}))([d-]{5,8})([d]{2})"; string phone = "380964649874"; if (Regex.IsMatch(phone, pattern, RegexOptions.IgnoreCase)) { Console.WriteLine("Проходит"); } else { Console.WriteLine(""" Укажите один из следующих вариантов номера: +380970601478 380970601478 +80970601478 80970601478 +0970601478 +0970601478 0970601478 097-060-1478 097-060-14-78 """); } } |
Перевірка кредитної картки
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
static void Main() { string pattern = @"^(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|6(?:011|5[0-9][0-9])[0-9]{12}|3[47][0-9]{13})$"; string phone = "5168756637895469"; if (Regex.IsMatch(phone, pattern, RegexOptions.IgnoreCase)) { Console.WriteLine("Проходит"); } else { Console.WriteLine(""" Укажите карту, соответствующую следующим типам кредитных карт: Visa (начинается с 4) Mastercard (начинается с 5) Discover (начинается с 6011 или 65) American Express (начинается с 34 или 37) """); } } |
Пояснення:
- Регулярний вираз використовує якоря ^ і $ для відповідності всьому рядку.
- Символ | використовується для зазначення альтернативних шаблонів для зіставлення.
- Клас символів [0-9] відповідає будь-якій цифрі від 0 до 9.
- Квантифікатор {n} вказує, що попередній елемент має збігтися рівно n разів.
- Група (?:…) без захоплення використовується для групування елементів разом без їхнього захоплення.
- Нарешті, необов’язкова група (?:…)? відповідає попередньому елементу нуль або один раз.
Дістати дату народження
Вам потрібно витягти всі дати з рядка у форматі “YYYY-MM-DD”?
Ось приклад:
1 2 3 4 5 6 7 8 9 10 11 12 |
static void Main() { string pattern = @"bd{4}-d{2}-d{2}b"; string input = "Today is 2023-02-21 and the meeting is on 2023-02-28"; MatchCollection matches = Regex.Matches(input, pattern); foreach (Match match in matches) { Console.WriteLine(match.Value); } } |
У цьому прикладі ми використовуємо шаблон регулярного виразу для пошуку всіх дат у вхідному рядку. Шаблон відповідає будь-якій послідовності з чотирьох цифр, за якими слідує дефіс, потім дві цифри, ще один дефіс і, нарешті, ще дві цифри. Ми використовуємо межі слів (b) на початку і в кінці шаблону, щоб забезпечити відповідність тільки повним датам, а не частковим датам у великих рядках.
Метод Regex.Matches використовується для пошуку всіх входжень шаблону у вхідному рядку. Потім ми перебираємо отриману колекцію MatchCollection і виводимо кожне значення збігу в консоль.
Я сподіваюся, що вам сподобалося читати цю статтю, і вона виявилася легкою для розуміння. Будь ласка, дайте мені знати, якщо у вас є якісь коментарі або виправлення.
Так само вам може бути цікава попередня стаття – Чому варто вчити саме C#?
Ви хочете навчитися писати код мовою програмування C#?
Створювати різні інформаційні системи, що складаються з сайтів, мобільних клієнтів, десктопних додатків, телеграм-ботів тощо.
Переходьте до нас на сторінку Dijix і ознайомтеся з умовами навчання, ми спеціалізуємося тільки на індивідуальних заняттях, як для початківців, так і для просунутих програмістів. Ви можете взяти як одне заняття для опрацювання питання, що вас цікавить, так і кілька, для більш щільної роботи. Завдяки особистому кабінету, кожен студент підвищить якість свого навчання, у вашому розпорядженні:
- Доступ до пройденого матеріалу
- Тематичні статті
- Бібліотека книг
- Онлайн тестування
- Спілкування в закритих групах