Программирование >>  Обработка исключительных ситуаций 

1 ... 115 116 117 [ 118 ] 119 120 121 ... 142


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

Метасимвол

Описание

\Z Фрагмент, совпадающий с регулярн1м в1ражением, следует искать

только в конце многострочной строки

\b Фрагмент, совпадающий с регулярным выражением, начинается

или заканчивается на границе слова (то есть между символами, соответствующими метасимволам \w и \W)

\ в Фрагмент, совпадающий с регулярн1м в1ражением, не должен

встречаться на границе слова

Например, выражение ~cat соответствует символам cat, встречающимся в начале строки, выражение cat$ - символам cat, встречающимся в конце строки (то есть за ними идет символ перевода строки), а выражение *$ представляет пустую строку, то есть начало строки, за которым сразу же следует ее конец.

В регулярных выражениях часто используют повторители. Повторители - это метасимволы, которые располагаются непосредственно после обычного символа или класса символов и задают количество его повторений в выражении. Например, если требуется записать выражение для поиска в тексте пяти идущих подряд цифр, вместо метасимволов \d\d\d\d\d можно записать \d{5}. Такому выражению будут соответствовать фрагменты 11111, 12345, 53332 и т. д.

Наиболее употребительные повторители перечислены в табл. 15.4.

Таблица 15.4. Повторители

Метасимвол Описание

Пример

Ноль или более повторений предыдущего элемента

Выражение ca*t соответствует фрагментам ct, cat, caat, caaaaaaaaaaat и т. д.

Одно или более повторений предыдущего элемента

Выражение ca+t соответствует фрагментам cat, caat, caaaaaaaaaaat и т. д.

Ни одного или одно повторение предыдущего элемента

В1ражение ca?t соответствует фрагментам ct и cat

Ровно п повторений предыдущего элемента

Выражение ca{3}t соответствует фрагменту caaat, а в1ражение (cat) {2} - фрагменту catcat

{ .}

По крайней мере п повторений предыдущего элемента

Выражение са {3, }t соответствует фрагментам caaat, caaaat, caaaaaaaaaaaat и т. д.

{п.т}

От п до m повторений предыдущего элемента

Выражение ca{2 ,4}t соответствует фрагментам caat, caaat и caaaat

Помимо рассмотренных элементов регулярных выражений можно использовать конструкцию выбора из нескольких элементов. Варианты выбора перечисляются

Круглые скобки служат для группировки символов.



358 Глава 15. Дополнительные средства С#

через вертикальную черту. Например, если требуется определить, присутствует ли в тексте хотя бы один элемент из списка cat>, dog и horse , можно использовать выражение

catdoghorse

При поиске используется так называемый ленивый алгоритм, по которому поиск прекращается при нахождении самого короткого из возможных фрагментов, совпадающих с регулярным выражением.

Примеры простых регулярных выражений:

целое число (возможно, со знаком):

t-+]?\d+

вещественное число (может иметь знак и дробную часть, отделенную точкой):

C-+]?\d+\.?\d*

российский номер автомобиля (упрощенно):

[A-Z]\d{3}[A-Z]{2}\d\dRUS

ВНИМАНИ Е-

Если требуется описать в выражении обычный символ, совпадающий с каким-либо метасимволом, его предваряют обратной косой чертой. Так, для поиска в тексте символа точки следует записать \., а для поиска косой черт1 - \\.

Например, для поиска в тексте имени файла cat.doc следует использовать регулярное выражение cat\.doc. Символ точка экранируется обратной косой чертой, ДДя того, чтобы он воспринимался не как метасимвол любой символ (в том числе и точка!), а непосредственно1.

Для группирования элементов выражения используются круглые скобки. Группирование применяется во многих случаях, например, если требуется задать повторитель не для отдельного символа, а для последовательности (это использовано в предыдущей таблице) . Кроме того, группироваиие служит для запоминания в некоторой переменной фрагмента текста, совпавшего с выражением, заключенным в скобки. Имя переменной задается в угловых скобках или апострофах:

(?<имя переменной>фрагмент выражения)

Фрагмент текста, совпавший при поиске с фрагментом регулярного выражения, заносится в переменную с заданным именем. Пусть, например, требуется выделить из текста номера телефонов, записанных в виде nnn-rm-nn. Регулярное выражение для поиска номера можно записать так:

(?<num>\d\d\d-\d\d-\d\d)

Обратите внимание на то, что метасимволе! регулярнгх в!ражений не совпадают с метг символами, которые используются в шаблонах имен файлов, таких как *.doc.



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

При анализе текста в переменную с именем num будут последовательно записываться найденные номера телефонов.

Рассмотрим еще один вариант применения группирования - для формирования обратных ссылок. Все конструкции, заключенные в круглые скобки, автоматически нумеруются, начиная с 1. Эти номера, предваренные обратной косой чертой, можно использовать для ссылок на соответствующую конструкцию. Например, выражение (\w)M используется для поиска сдвоенных символов в словах (wa , mass, cooperate)1.

Круглые скобки могут быть вложенными, при этом номер конструкции определяется порядком открывающей скобки в выражении. Примеры:

(Вася)\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)\k<s>, где s - имя переменной, в которой запоминается символ, \к - элемент синтаксиса.

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

Классы библиотеки .NET для работы с регулярными выражениями

Классы библиотеки .NET для работы с регулярными выражениями объединены в пространство имен System.Text.RegularExpressions.

1 Если написать просто будут найден! все пары алфавитно-цифровсх символов.

2 Для распознавания этого вида комментария должен бгть включен режим х RegexOptions. IgnorePatternWhitespace.



1 ... 115 116 117 [ 118 ] 119 120 121 ... 142

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика