Для работы с регулярными выражениями в C# предусмотрен класс System.Text.RegularExpressions.Regex. Структура регулярных выражения полностью аналогична регулярным выражениям, используемым в PHP. Для выполнения поиска по строке, замены, или выделения некоторых блоков используются различные методы ранееупомянутого класса. Текст регулярного выражения передается в конструктор Regex'a (хотя это не обязательно, ибо его можно передать и непосредственно в нужный Вам метод).
Об этих методах сейчас и пойдет речь.
Подходит-ли строка под регулярное выражение
Для проверки того, подходит-ли строка под регулярное выражение используется метод Regex.IsMatch (), возвращающий true если текст подходит под регулярное выражение и false если нет. Его конструктор может принимать следующие наборы данных:
IsMatch(string input, int startat)
Здесь input — обрабатываемая строка, а startat — позиция в строке, с которой следует начинать поиск. Применяется регулярное выражение, ранее переданное в конструктор класса Regex.
IsMatch(string input)
input — обрабатываемая строка. Применяется регулярное выражение, ранее переданное в конструктор класса Regex.
IsMatch(string input, string pattern, System.Text.RegularExpressions.RegexOptions options)
input — обрабатываемая строка, pattern — регулярное выражение, options — набор опций проверки. О них поговорим чуть позже.
IsMatch(string input, string pattern)
input — обрабатываемая строка, pattern — регулярное выражение.
RegexOptions
Этот класс предстваляет собой набор опций, применяемых к регулярному выражению.
Compiled — указывает на то, скомпилировано-ли регулярное выражение в сборку (Assembly). Это ускоряет процесс применения регулярного выражения, но увеличивает время загрузки программы.
CultureInvariant — указывает на то, следует-ли пропускать культурные различия в тексте (например, в Англии цвет — colour, а в Америке — color).
ECMAScript — включает ECMAScript-совместимость регулярных выражений. Обычно используется в связке с опцией IgnoreCase.
IgnoreCase — указывает на то, что в обрабатываемом тексте не следует учитывать регистр букв.
IgnorePatternWhitespace — удаляет из тела регулярного выражения неэкранированный пробел и дает возможность использовать комментарии после символа #
Multiline — многострочный режим. Позволяет использовать директивы ^ и $ как символы начала и конца каждой линии.
None — пустая опция.
RightToLeft — указывает на то, что поиск следует производить справа налево, а не слева направо.
Singleline — однострочный режим. Изменяет значение точки (.) так, что она может представлять любой символ (включая символ переноса строки — n).
Замена текста
Для замены текста с помощью регулярынх выражений используется метод Regex.Replace (), возвращающий string-строку с измененным текстом. Основные способы передачи данных в его конструктор:
Replace(string input, string pattern, string replacement)
Здесь input — обрабатываемая строка, pattern — текст регулярного выражения, а replacement — текст, на который надо заменить найденные области.
Replace(string input, string pattern, string replacement, System.Text.RegularExpressions.RegexOptions options)
Опять-же input — обрабатываемая строка, pattern — текст регулярного выражения, replacement — текст, на который надо заменить найденные области. options — набор опций поиска (см. выше).
Replace(string input, string replacement)
input — обрабатываемая строка, replacement — заменяющий текст. Применяется регулярное выражение, ранее переданное в конструктор класса Regex.
Replace(string input, string replacement, int count)
Полностью аналогичен предыдущему примеру, за исплючением параметра count, который обозначает максимальное количество выполняемых замен.
Разбиение строки
Для разбиения строки на части используется метод Regex.Split (), который возвращает массив строк (string[]) с частями исходной строки. Основные способы передачи данных в конструктор:
Split(string input, string pattern)
Разбивает строку input на части, описанные в регулярном выражении pattern.
Split(string input, int count)
Разбивает строку input на части, описанные в регулярном выражении, которое было передано в конструктор класса Regex. Возвращает максимум count подстрок.
Поиск совпадений
Для поиска совпадений используется метод Regex.Matches (). Этот метод возвращает массив класса MatchCollection, содержащий найденные совпадения и ряд другой информации.
Доступ к найденному тексту производится с помощью конструкции match[i].Value. Получить количество найденных совпадений можно из свойства match.Count.
Конструкторы класса:
Matches(string input, string pattern)
input — обрабатываемый текст, pattern — текст регулярного выражения.
Matches(string input, string pattern, System.Text.RegularExpressions.RegexOptions options)
Аналогичен предыдущему, но позволяет задать опции поиска (см. выше).
Matches(string input, int startat)
Выполняет поиск с позиции startat строки string. Применяется регулярное выражение, переданное в конструктор класса Regex.
И напоследок исходный код программы, работающей с регулярными выражениями:
using System;
using System.Text.RegularExpressions;
namespace RegexSample
{
class mainClass
{
static void Main()
{
string text = "Итак, <b>поиск с заменой</b> осуществляется с помощью метода <b>Replace</b>.";
bool match = Regex.IsMatch(text, "<b>(.*?)</b>");
Console.WriteLine(match.ToString());
string textOut = Regex.Replace(text, "<b>(.*?)</b>", @"<u>$1</u>",
RegexOptions.IgnoreCase);
Console.WriteLine(textOut);
string[] splitStr = Regex.Split(text, ">");
for (int i = 0; i < splitStr.Length; i++)
{
Console.WriteLine(splitStr[i]);
}
MatchCollection matches = Regex.Matches(text, "<b>(.*?)</b>", RegexOptions.IgnoreCase);
Console.WriteLine("Совпадений: " + matches.Count.ToString());
for (int i = 0; i < matches.Count; i++)
{
Console.WriteLine("Совпадение " + i + ": " + matches[i].Value);
}
Console.ReadLine();
}
}
}
Webmoney Z163628999150, R61715184597
|
04 Апр 2009
небольшой пример использования регулярных выражений в C# для проверки правильности введенного email адреса.
08 Фев 2010
Простой и полезный пример регулярных выражений, даже не знал, что это так просто, спасибо!