Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Алгоритми та структури даних ЗПІ-91-20210115T104612Z-001 / Лекція 14. Регулярні вирази.docx
Скачиваний:
29
Добавлен:
15.01.2021
Размер:
56.28 Кб
Скачать

Приклад 7

Перевірка правильності адреси електронної пошти.

static void Main(string[] args)

{

//перевірка електронної пошти

Regex myReg1 = new Regex(@"^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}" +

@"\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\" +

@".)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$");

Console.WriteLine(myReg1.IsMatch("email@email.com")); // True

Console.WriteLine(myReg1.IsMatch("t.korotune@gmail.com")); // True

Console.WriteLine(myReg1.IsMatch("@ email.com")); // False

Console.ReadKey();

}

Тут перед початком рядка регулярного виразу є символ «@» який вказує компілятору сприймати все символи буквально. Це необхідно, щоб коректно сприймався символ «\».

Ще є такий шаблон для перевірки поштової адреси

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

Приклад 8. Перевірка прізвища і імені (тільки літери)

Regex regex = new Regex(@"^[А-ЯЁ][а-яё]+ [А-ЯЁ][а-яё]+$");

Match match = regex.Match(name);

([А-ЯЁ][а-яё]+[\-\s]?){3,}

Параметри пошуку

Розглянемо другий конструкторі Regex, який приймає в якості другого аргументу значення перелічування RegexOptions. У цьому перелічуванні є наступні значення:

IgnoreCase - ігнорування регістра при пошуку. Знаходить відповідності незалежно великими або малими літерами в рядку написано слово;

RightToLeft - пошук буде виконаний справа наліво, а не зліва направо;

Multiline - багаторядковий режим пошуку. Змінює роботу спец-символів «^» і «$» так, що вони відповідають початку і кінцю кожного рядка, а не тільки початку і кінця одного рядка;

Singleline - однорядковий режим пошуку;

CultureInvariant - ігнорування національних установок рядка;

ExplicitCapture - забезпечується пошук тільки буквальних відповідностей;

Compiled - регулярний вираз компілюється в збірку, що робить більш швидким його виконання але збільшує час запуску;

IgnorePatternWhitespace - ігнорує в шаблоні все неекрановані пробіли. З цим параметром шаблон «a b» буде аналогічним шаблоном «ab»;

None - використовувати пошук за замовчуванням.

Якщо необхідно встановити кілька параметрів, тоді вони поділяються оператором поразрядного «АБО» - «|».

Regex myReg = new Regex (@ "Sergey", RegexOptions.IgnoreCase | RegexOptions.IgnorePatternWhitespace);

Приклад 9. html парсер

Написати програму (html парсер), яка виводить на консоль та у текстовий файл вміст html документу без тегів і атрибутів.

Тест:

Вхідний файл: Input.html

<html>

<head>

<title>ПВНЗ МНТУ </title>

</head>

<body>

<p><a href="https://istu.edu.ua/">Вас вітає Міжнародний науково-технічний університет! </a>

Запрошуємо до участі у науковій конференції «Вища освіта - студентська наука - сучасне суспільство: напрями розвитку»

19 квітня 2019 року в університеті проходитиме III Міжнародна студентська науково-практична конференція

«Вища освіта - студентська наука - сучасне суспільство: напрями розвитку».

</p>

</body>

</html>

Вихідний файл: Output.txt

ПВНЗ МНТУ

Вас вітає Міжнародний науково-технічний університет!

Запрошує до участі у науковій конференції «Вища освіта - студентська наука - сучасне суспільство: напрями розвитку»

19 квітня 2019 року в університеті проходитиме III Міжнародна студентська науково-практична конференція

«Вища освіта - студентська наука - сучасне суспільство: напрями розвитку».

Варіант1. Використання регулярних виразів.

Регулярний вираз: "<[^>]*>"

using System;

using System.Collections.Generic;

using System.IO;

using System.Text;

using System.Text.RegularExpressions;

namespace Zavd_4

{

class Program

{

private const string InputFileName = "Input.html";

private const string OutputFileName = "Output.txt";

private const string Charset = "windows-1251";

static void Main(string[] args)

{

if (!File.Exists(InputFileName))

{ Console.WriteLine("File " + InputFileName + " not found.");

return;

}

StreamReader reader = null;

StreamWriter writer = null;

try

{

Encoding encoding = Encoding.GetEncoding(Charset);

reader = new StreamReader(InputFileName, encoding);

writer = new StreamWriter(OutputFileName, false, encoding);

string line;

while ((line = reader.ReadLine()) != null)

{

line = RemoveAllTags(line);

line = RemoveDoubleNewLines(line);

line = TrimNewLines(line);

if (!string.IsNullOrEmpty(line))

{

Console.WriteLine(line);

writer.WriteLine(line);

}

}

}

catch (IOException)

{

Console.WriteLine("Can not read file " + InputFileName + ".");

}

finally

{

if (reader != null) { reader.Close(); }

}

writer.Close();

Console.ReadKey();

}

private static string RemoveAllTags(string str)

{

string strWithoutTags = Regex.Replace(str, "<[^>]*>", "\n");

return strWithoutTags;

}

/// Replaces sequence of new lines with only one new line

/// </summary>

private static string RemoveDoubleNewLines(string str)

{ string pattern = "[\n]+";

return Regex.Replace(str, pattern, "\n");

}

/// <summary>

/// Removes new lines from start and end of string

/// </summary>

private static string TrimNewLines(string str)

{

int start = 0;

while (start < str.Length && str[start] == '\n')

{

start++;

}

int end = str.Length - 1;

while (end >= 0 && str[end] == '\n')

{

end--;

}

if (start > end)

{

return string.Empty;

}

string trimmed = str.Substring(start, end - start + 1);

return trimmed;

}

}

}

  1. https://docs.microsoft.com/ru-ru/dotnet/standard/base-types/regular-expression-language-quick-reference

  2. http://qaru.site/questions/1077691/basic-regular-expression-for-a-generic-phone-number