Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






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






Регулярные выражения предназначены для обработки текстовой информации и

обеспечивают:

- эффективны й поиск в тексте по заданному шаблону;

- редактирование, замену и удаление подстрок;

- формирование итоговых отчетов по результатам работы с текстом.

С помощью регулярных выражений удобно обрабатывать, например, файлы в формате HTML, файлы журналов ил и длинные текстовые файлы. Для поддержки регулярных выражений в библиотеку.NE T включены классы, объединенные в пространство имен System.Text.RegularExpressions.

Метасимволы

Регулярное выражение — это шаблон (образец), по которому выполняется поиск соответствующего ему фрагмента текста. Язык описания регулярных выражений состоит из символов двух видов: обычных и метасимволов. Обычный символ представляет в выражении сам себя, а метасимвол — некоторый класс символов, например любую цифру или букву.

Например, регулярное выражение для поиска в тексте фрагмента «Вася» заполняется с помощью четырех обычных символов Вася, а выражение для поиска двух цифр, идущих подряд, состоит из двух метасимволов \d\d.

С помощью комбинаций метасимволов можно описывать сложные шаблоны для поиска. Например, можно описать шаблон для IP-адреса, адреса электронной почты, различных форматов даты, заголовков определенного вида и т. д.

В таблице 3.1 описаны наиболее употребительные метасимволы, представляющие собой классы символов.

 

Таблица 3.1 Метасимволы, используемые для составления шаблона регулярных выражений

Символ Интерпретация
Escape-последовательности
\b \t \r \n При использовании его в квардратный скобках соответствует символу " обратная косая черта" с кодом
Классы символов
. Соответствует любому символу, за исключением символа конца строки
[aeiou] Соответствует набору символов из множества, заданного в квадратных скобках
[^aeiou] Отрицание. Соответствует любому символу, за исключением символов, заданных в квадратных скобках
[0=9a-fA-F] Задание диапазона символов, упорядоченных по коду. Так, 0-9 задает любую цифру
\w Множество символов, используемых при задании идентификаторов - большие и малые символы латиницы, цифры и знак подчеркивания
\W Любой символ кроме букв, цифр и знака подчеркивания
\s Соответствует пробельным символам (символ пробела, табуляции, перевода строки, новой страницы)
\S Любой символ, не являющийся пробелом
\d Соответствует любому символу из множества цифр
\D Любой символ кроме десятичной цифры
\b Соответствие следует искать на границе слова (т.е. между символами, заданными \w и \W)
\B Соответствие следует искать в любом месте, за исключением границы слова
Операции (повторители / модификаторы)
* Задает ноль или более соответствий, например, \w* или (abc)*
+ Задает одно или более соответствий, например, \w+ или (abc)+
? Задает ноль или одно соответствие, например, \w? или (abc)?
{n} Задает в точности n соответствий, например, \w{2}
{n, m} Задает по меньшей мере n, но не более m соответствий, например, (abc){2, 5}
Группирование
(? < Name>) При обнаружении соответствия выражению, заданному в круглых скобках, создается именованная группа, которой дается имя Name. Например, (? < tel> \d{7}). При обнаружении последовательности из семи цифр будет создана группа с именем tel
() Разбивают регулярное выражение на группы. Для каждого выражения, заключенного в круглые скобки, содается группа, автоматически получающая номер. Полному регулярному выражению соответствуюет группа с номером 0. Например, выражение (\w)\1 используется для поиска сдвоенных символов
Уточняющие метасимволы
^ Соответствие следует искать только в начале строки
$ Соответствие следует искать только в конце строки
\A Соответствие следует искать только в начале многострочной строки
\Z Соответствие следует искать только в конце многострочной строки

Помимо рассмотренных элементов регулярных выражений можно использовать конструкцию выбора из нескольких элементов. Варианты выбора перечисляются через вертикальную черту. Например, если требуется определить, присутствует ли в тексте хотя бы один элемент из списка «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 — элемент синтаксиса.

В регулярное выражение можно помещать комментарии. Поскольку выражения обычно проще писать, чем читать, это — очень полезная возможность. Комментарий либо помещается внутрь конструкции (? #), либо располагается, начиная от символа # до конца строки.






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.