Регулярные выражения
Регулярные выражения предназначены для обработки текстовой информации и обеспечивают: - эффективны й поиск в тексте по заданному шаблону; - редактирование, замену и удаление подстрок; - формирование итоговых отчетов по результатам работы с текстом. С помощью регулярных выражений удобно обрабатывать, например, файлы в формате HTML, файлы журналов ил и длинные текстовые файлы. Для поддержки регулярных выражений в библиотеку.NE T включены классы, объединенные в пространство имен System.Text.RegularExpressions. Метасимволы Регулярное выражение — это шаблон (образец), по которому выполняется поиск соответствующего ему фрагмента текста. Язык описания регулярных выражений состоит из символов двух видов: обычных и метасимволов. Обычный символ представляет в выражении сам себя, а метасимвол — некоторый класс символов, например любую цифру или букву. Например, регулярное выражение для поиска в тексте фрагмента «Вася» заполняется с помощью четырех обычных символов Вася, а выражение для поиска двух цифр, идущих подряд, состоит из двух метасимволов \d\d. С помощью комбинаций метасимволов можно описывать сложные шаблоны для поиска. Например, можно описать шаблон для IP-адреса, адреса электронной почты, различных форматов даты, заголовков определенного вида и т. д. В таблице 3.1 описаны наиболее употребительные метасимволы, представляющие собой классы символов.
Таблица 3.1 Метасимволы, используемые для составления шаблона регулярных выражений
Помимо рассмотренных элементов регулярных выражений можно использовать конструкцию выбора из нескольких элементов. Варианты выбора перечисляются через вертикальную черту. Например, если требуется определить, присутствует ли в тексте хотя бы один элемент из списка «cat», «dog» и «horse», можно использовать выражение cat|dog|horse При поиске используется так называемый «ленивый» алгоритм, по которому поиск прекращается при нахождении самого короткого из возможных фрагментов, совпадающих с регулярным выражением. Если требуется описать в выражении обычный символ, совпадающий с каким-либо метасимволом, его предваряют обратной косой чертой. Так, для поиска в тексте символа точки следует записать \., а для поиска косой черты - \\. Например, для поиска в тексте имени файла cat.doc следует использовать регулярное выражение cat\.doc. Символ «точка» экранируется обратной косой чертой, для того, чтобы он воспринимался не как метасимвол «любой символ» (в том числе и точка!), а непосредственно. Для группирования элементов выражения используются круглые скобки. Группирование применяется во многих случаях, например, если требуется задать повторитель не для отдельного символа, а для группы символов. Кроме того, группирование служит для запоминания в некоторой переменной фрагмента текста, совпавшего с выражением, заключенным в скобки. Имя переменной задается в угловых скобках или апострофах: (? < имя_переменной> фрагмент_выражения) Фрагмент текста, совпавший при поиске с фрагментом регулярного выражения, заносится в переменную с заданным именем. Пусть, например, требуется выделить из текста номера телефонов, записанных в виде nnn-rm-nn. Регулярное выражение для поиска номера можно записать так: (? < num> \d\d\d-\d\d-\d\d) Обратите внимание на то, что метасимволы регулярных выражений не совпадают с метасимволами, которые используются в шаблонах имен файлов, таких как *.doc. При анализе текста в переменную с именем num будут последовательно записываться найденные номера телефонов. Рассмотрим еще один вариант применения группирования — для формирования обратных ссылок. Все конструкции, заключенные в круглые скобки, автоматически нумеруются, начиная с 1. Эти номера, предваренные обратной косой чертой, можно использовать для ссылок на соответствующую конструкцию. Например, выражение (\w)\1 используется для поиска сдвоенных символов в словах (mass, cooperate). Круглые скобки могут быть вложенными, при этом номер конструкции определяется порядком открывающей скобки в выражении. Примеры: (Вася)\s+(должен)\s+(? < sum> \d+)\spy6\.\s+Hy что же ты, \1 В этом выражении три подвыражения, заключенных в скобки. Ссылка на первое из них выполняется в конце выражения. С этим выражением совпадут, например, фрагменты Вася должен 5 руб. Ну что же ты, Вася Вася должен 53459 руб. Ну что же ты, Вася Выражение, задающее IP-адрес: ((\d{1.3}\.){3}\d{1.3}) Адрес состоит из четырех групп цифр, разделенных точками. Каждая группа может включать от одной до трех цифр. Примеры IP-адресов: 212.46.197.69, 212.194.5.106, 209.122.173.160. Первая группа, заключенная в скобки, задает весь адрес. Ей присваивается номер 1. В нее вложены вторые скобки, определяющие границы для повторителя {3}. Переменную, имя которой задается внутри выражения в угловых скобках, также можно использовать для обратных ссылок в последующей части выражения. Например, поиск двойных символов в словах можно выполнить с помощью выражения (? < s> \w)\1< s>, где s — имя переменной, в которой запоминается символ, \w — элемент синтаксиса. В регулярное выражение можно помещать комментарии. Поскольку выражения обычно проще писать, чем читать, это — очень полезная возможность. Комментарий либо помещается внутрь конструкции (? #), либо располагается, начиная от символа # до конца строки.
|