**

Лабораторная работа №12

** **

[Регулярные выражения](https://github.com/kolei/OAP/blob/master/articles/t5_regex.md)

** **

Регулярки в C#

** ```js using System.Text.RegularExpressions; string s = "Бык тупогуб, тупогубенький бычок, у быка губа бела была тупа"; Regex regex = new Regex(@"туп(\w*)"); MatchCollection matches = regex.Matches(s); if (matches.Count > 0) { foreach (Match match in matches) Console.WriteLine(match.Value); } else { Console.WriteLine("Совпадений не найдено"); } ``` **

Вывод:

** ```js тупогуб тупогубенький тупа ``` **

** ```js string text = "One car red car blue car"; string pat = @"(\w+)\s+(car)"; Regex r = new Regex(pat, RegexOptions.IgnoreCase); Match m = r.Match(text); int matchCount = 0; // можно искать не одно вхождение, а несколько while (m.Success) { Console.WriteLine("Match"+ (++matchCount)); // тут можно было бы перебирать по длине массива Groups, // но мы по своему шаблону и так знаем, что у нас две подгруппы for (int i = 1; i <= 2; i++) { Console.WriteLine($"Group {i}='{m.Groups[i]}'"); } // поиск следующей подстроки соответсвующей шаблону m = m.NextMatch(); } ``` **

Вывод:

** ```js Match1 Group 1='One' Group 2='car' Match2 Group 1='red' Group 2='car' Match3 Group 1='blue' Group 2='car' ``` **

Пример с номером

** ```js using System.Text.RegularExpressions; string usl = @"^[+]{1}[7]{1}[0-9]{3}[0-9]{3}[0-9]{2}[0-9]{2}$"; Console.Write("input your RU number: "); string input = Console.ReadLine(); Regex number = new Regex(usl); while (true) { if (number.IsMatch(input)) { Console.WriteLine("your number is true!"); } else { Console.WriteLine("your number is fake!!!!!!"); } break; } ``` Тут я немного сглупил, ведь мог использовать `\d` и не расписывать условие для цифр от 0 до 9 в квадратных скобках. **

Вывод:

** ```js input your RU number: +79025431234 your number is true! ``` **

Пример с эмайлом

** ```js using System.Text.RegularExpressions; 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}))$"; while (true) { Console.WriteLine("Введите адрес электронной почты"); string email = Console.ReadLine(); if (Regex.IsMatch(email, pattern, RegexOptions.IgnoreCase)) { Console.WriteLine("Email подтвержден"); break; } else { Console.WriteLine("Некорректный email"); } } ``` **

Вывод:

** ```js Введите адрес электронной почты thestrongest123gmail.com Некорректный email Введите адрес электронной почты thestrongest123@gmail.com Email подтвержден ``` **

Пример с заменой

** ```js using System.Text.RegularExpressions; string s = "Мама мыла раму."; string pattern = @"\s+"; string target = "---->"; Regex regex = new Regex(pattern); string result = regex.Replace(s, target); Console.WriteLine(result); ``` **

Вывод:

** ```js Мама---->мыла---->раму. ``` **

Решение прошлых заданий данным методом

** `Домашнее задание со строками я сразу решал таким способом. О данном способе я узнал чуть раньше этого занятия. Так что я просто продублирую свои коды с той лабы сюда.` **

Номера автобусов

** ```js using System.Text.RegularExpressions; string bukvi = @"^[A-Z]{1}\d{3}[A-Z]{2}$"; Regex check = new Regex(bukvi); Console.WriteLine(); string input = Console.ReadLine(); while (true) { if (check.IsMatch(input)) { Console.WriteLine("True"); break; } else { Console.WriteLine("False"); break; } } ``` **

Стрелки

** ```js using System.Text.RegularExpressions; string arrow1 = ">>-->"; string arrow2 = "<--<<"; Regex check1 = new Regex(arrow1); Regex check2 = new Regex(arrow2); string input = Console.ReadLine(); while (true) { if (check1.IsMatch(input)) { Console.WriteLine("True"); break; } else if (check2.IsMatch(input)) { Console.WriteLine("True"); break; } else { Console.WriteLine("False"); break; } } ```