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

Программирование Регулярные выражения в C#

В этой теме 0 ответов, 1 участник, последнее обновление  Васильев Владимир Сергеевич 1 неделя, 3 дн. назад.

  • Автор
    Сообщения
  • #5856
    @admin

    Для работы с регулярными выражениями в C# предусмотрен класс System.Text.RegularExpressions.Regex. Структура регулярных выражения полностью аналогична регулярным выражениям, используемым в PHP. Для выполнения поиска по строке, замены, или выделения некоторых блоков используются различные методы ранееупомянутого класса. Текст регулярного выражения передается в конструктор Regex’a (хотя это не обязательно, т.к. его можно передать и непосредственно в нужный Вам метод).

    Во всех прототипах функций, описываемых ниже — input задает обрабатываемый текст или строку, а pattern представляет собой текст регулярного выражения (шаблон).

    Подходит-ли строка под регулярное выражение

    Для проверки того, подходит-ли строка под регулярное выражение используется метод Regex.IsMatch(), возвращающий true если текст подходит под регулярное выражение и false если нет.

    • IsMatch(string input)
    • IsMatch(string input, int startat)
    • IsMatch(string input, string pattern, System.Text.RegularExpressions.RegexOptions options)
    • IsMatch(string input, string pattern)

    В первом варианте — к входной строке применяется регулярное выражение, ранее переданное в конструктор класса Regex.

    Параметр startat может задавать позицию в строке, с которой следует начинать поиск.

    Параметр options — набор опций проверки. О них поговорим чуть позже.

    RegexOptions

    Этот класс предстваляет собой набор опций, применяемых к регулярному выражению.

    1. Compiled — указывает на то, скомпилировано-ли регулярное выражение в сборку (Assembly). Это ускоряет процесс применения регулярного выражения, но увеличивает время загрузки программы.
    2. CultureInvariant — указывает на то, следует-ли пропускать культурные различия в тексте (например, в Англии цвет — colour, а в Америке — color).
    3. ECMAScript — включает ECMAScript-совместимость регулярных выражений. Обычно используется в связке с опцией IgnoreCase.
    4. IgnoreCase — указывает на то, что в обрабатываемом тексте не следует учитывать регистр букв.
    5. IgnorePatternWhitespace — удаляет из тела регулярного выражения неэкранированный пробел и дает возможность использовать комментарии после символа #
    6. Multiline — многострочный режим. Позволяет использовать директивы ^ и $ как символы начала и конца каждой линии.
    7. RightToLeft — указывает на то, что поиск следует производить справа налево, а не слева направо.
    8. Singleline — однострочный режим. Изменяет значение точки (.) так, что она может представлять любой символ (включая символ переноса строки — \n).

    Замена текста

    Для замены текста с помощью регулярынх выражений используется метод Regex.Replace(), возвращающий string-строку с измененным текстом. Параметр replacement задает текст, на который надо заменить найденные области. Имеются следующие варианты замены:

    • Replace(string input, string pattern, string replacement)
    • Replace(string input, string pattern, string replacement, System.Text.RegularExpressions.RegexOptions options)
    • Replace(string input, string replacement)
    • Replace(string input, string replacement, int count)</li>
      

    Параметром count, можно задавать максимальное количество выполняемых замен. Если pattern не задан — то используется регулярное выражение объекта класса Regex.

    Разбиение строки

    Для разбиения строки на части используется метод 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)

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

Для ответа в этой теме необходимо авторизоваться.