System.Text.RegularExpressions — мощный инструмент для работы с текстом.
Лекция охватывает: основы, синтаксис, группы, опции, производительность, реальные примеры.
📍 gadget59.ru — ваш гид в мире .NET
Regex (Regular Expression) — это последовательность символов, задающая шаблон для поиска, замены и извлечения подстрок.
Основные типы:
| Метод | Описание |
|---|---|
Regex.IsMatch() | Возвращает true, если шаблон найден |
Regex.Match() | Возвращает первое совпадение (тип Match) |
Regex.Matches() | Возвращает все совпадения (MatchCollection) |
| Метасимвол | Значение |
|---|---|
\d | Цифра [0-9] |
\D | Не цифра |
\w | Буква, цифра или "_" [A-Za-z0-9_] |
\W | Не \w |
\s | Пробельный символ |
\S | Не пробельный |
. | Любой символ, кроме \n (с опцией Singleline — включая \n) |
| Символ | Описание |
|---|---|
* | 0 или более раз |
+ | 1 или более раз |
? | 0 или 1 раз |
{n} | ровно n раз |
{n,} | n или более раз |
{n,m} | от n до m раз |
^ | Начало строки |
$ | Конец строки |
Важно Квантификаторы по умолчанию жадные (захватывают максимум).
Жадный (по умолчанию) — захватывает максимально возможную длину.
Ленивый (добавить ? после квантификатора) — минимально возможную.
Скобки ( ) создают группу, которую можно извлечь через match.Groups[index].
(?<имя>...)Группам можно давать имена для удобства.
Совет Именованные группы делают код читаемее.
(?:...)Если нужно сгруппировать часть шаблона, но не создавать отдельную группу в Groups.
| Опция | Описание |
|---|---|
IgnoreCase | Игнорировать регистр |
Multiline | ^ и $ работают с каждой строкой |
Singleline | Точка (.) включает перевод строки |
Compiled | Компилирует Regex в IL (быстрее при многократном использовании) |
IgnorePatternWhitespace | Игнорирует пробелы и комментарии в шаблоне |
Multiline позволяет ^ и $ работать на каждой строке.
Заменяет все вхождения шаблона на указанную строку.
Простой, но надёжный шаблон для проверки email.
Примечание Для полной валидации email используйте более сложный шаблон или библиотеку.
При многократном использовании (например, в цикле) компиляция даёт прирост скорости.
Некоторые шаблоны могут приводить к экспоненциальному росту времени (catastrophic backtracking).
Позволяет добавлять пробелы и комментарии в шаблон.
Если группа повторяется (например, (\d+)+), в Group.Captures хранятся все значения.
Позитивный lookahead (?=...) — проверяет, что после текущей позиции есть совпадение.
Негативный lookahead (?!...) — что нет совпадения.
Позитивный lookbehind (?<=...) — проверяет, что перед текущей позицией есть совпадение.
Негативный lookbehind (?<!...) — что нет совпадения.
Стандартные \w, \d работают с ASCII. Для кириллицы используйте категории Unicode.
| Способ | Пример | Когда использовать |
|---|---|---|
| Статический | Regex.IsMatch(text, pattern) | Одноразовое использование |
| Экземплярный | new Regex(pattern).IsMatch(text) | Многократное использование, особенно с Compiled |
\., \(, \*? для ленивого поиска(a+)+)Groups[0] — это всё совпадение, Groups[1] — первая скобкаRegex.IsMatch("", ".*") вернёт trueCompiled при многократном использованииTimeout для критических операций(?:)static readonly Regex с Compiled.
Contains, StartsWith, IndexOf (быстрее для простых поисков)Что мы рассмотрели:
IsMatch, Match, Matches, Replace, Split( ), именованные, несохраняемыеIgnoreCase, Compiled, Multiline, Singleline🤝 Спасибо за внимание! Вопросы?