Українська
Підсумки
Висновки
Регулярні вирази – мова шаблонів для пошуку, перевірки та перетворення тексту. Шаблон складається з літералів, класів символів, квантифікаторів, якорів, груп і переглядів, а в C# його зручно записувати буквальним рядком @"…" або необробленим рядковим літералом. Клас Regex перевіряє збіг (IsMatch), знаходить збіги (Match, Matches, Count), замінює (Replace з підстановками або MatchEvaluator) і розбиває текст (Split), а групи дають доступ до частин збігу. Поведінку рушія налаштовують параметри RegexOptions. Шаблон із вкладеними квантифікаторами може працювати експоненційно довго, тому для даних ззовні використовують тайм-аут, NonBacktracking або простіші шаблони. Шаблони, відомі під час компіляції, оголошують атрибутом [GeneratedRegex], а їхню правильність підтверджують параметризованими модульними тестами. Регулярний вираз перевіряє форму тексту; значення перевіряють методами TryParse, а структуровані формати розбирають парсерами.
Питання для самоперевірки
- Які задачі обробки тексту розв’язують регулярні вирази? Чим вони кращі за
IndexOfіSplit? - Як записати шаблон у коді C#? Чим зручні буквальні рядки та raw string literals?
- Що таке клас символів? Чим відрізняються
\dі[0-9],\wі[A-Za-z0-9_]? - Як записати шаблон для українських слів з апострофом? Чому не підходить
[А-Яа-я]? - Які квантифікатори є в .NET? Чим жадібний квантифікатор відрізняється від лінивого?
- Для чого потрібні якорі
^,$,\A,\z,\b? Чому для перевірки введення обов’язкові якорі? - Чим відрізняються статичні та екземплярні методи класу
Regex? Що таке кеш шаблонів? - Які властивості має об’єкт
Match? Як перебрати всі збіги? - Чим відрізняються нумеровані, іменовані та незахоплювальні групи?
- Що таке зворотне посилання? Наведіть приклад.
- Які підстановки можна використовувати в рядку заміни? Коли потрібен
MatchEvaluator? - Для чого призначений метод
Regex.Escape? - Як діють параметри
IgnoreCase,Multiline,Singleline,IgnorePatternWhitespace? - Що таке перегляд уперед і назад? Як перевірити кілька умов для пароля одним шаблоном?
- Що таке катастрофічне повернення та ReDoS? Як від них захиститися?
- Які переваги дає атрибут
[GeneratedRegex]? - Як протестувати шаблон за допомогою
[Theory]і[InlineData]?
Корисні посилання
- Регулярні вирази .NET: https://learn.microsoft.com/dotnet/standard/base-types/regular-expressions
- Довідник мови регулярних виразів: https://learn.microsoft.com/dotnet/standard/base-types/regular-expression-language-quick-reference
- Параметри регулярних виразів: https://learn.microsoft.com/dotnet/standard/base-types/regular-expression-options
- Рекомендації щодо регулярних виразів: https://learn.microsoft.com/dotnet/standard/base-types/best-practices-regex
- Генератори джерел для регулярних виразів: https://learn.microsoft.com/dotnet/standard/base-types/regular-expression-source-generators
- Клас
Regex: https://learn.microsoft.com/dotnet/api/system.text.regularexpressions.regex - Регулярні вирази у Visual Studio: https://learn.microsoft.com/visualstudio/ide/using-regular-expressions-in-visual-studio
- Модульне тестування з xUnit: https://learn.microsoft.com/dotnet/core/testing/unit-testing-csharp-with-xunit
- xUnit.net v3: https://xunit.net/docs/getting-started/v3/getting-started