|
Программирование >> Обработка исключительных ситуаций
Регулярные выражения Метасимвол Описание \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. Повторители Метасимвол Описание Пример
Помимо рассмотренных элементов регулярных выражений можно использовать конструкцию выбора из нескольких элементов. Варианты выбора перечисляются Круглые скобки служат для группировки символов. 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.
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |