Không có mô tả

vivanov 70a7ac5655 first commit 10 tháng trước cách đây
.gitignore.txt 429e5ab52f first commit 11 tháng trước cách đây
readme.md 70a7ac5655 first commit 10 tháng trước cách đây

readme.md

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

Регулярные выражения

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

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("Совпадений не найдено");
}

Вывод:

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

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();
}

Вывод:

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

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

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 в квадратных скобках.

Вывод:

input your RU number: +79025431234
your number is true!

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

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");
    }
}

Вывод:

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

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

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);

Вывод:

Мама---->мыла---->раму.

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

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

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

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;
    }
}

Стрелки

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;
    }
}