Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Метасимволи




Регулярний вираз - це шаблон (зразок), по якому виконується пошук відповідного йому фрагмента тексту. Мова опису регулярних виразів складається з символів двох видів: звичайних і метасимволів. Звичайний символ представляє у виразі сам себе, а метасимвол - деякий клас символів, наприклад, будь-яку цифру або букву.

Наприклад, регулярний вираз для пошуку в тексті фрагмента “Вася” записується за допомогою чотирьох звичайних символів Вася, а вираз для пошуку двох цифр, що йдуть підряд, складається з двох метасимволів \d\d.

За допомогою комбінацій метасимволів можна описувати складні шаблони для пошуку. Наприклад, можна описати шаблон для IP-адреси, адреси електронної пошти, різних форматів дати, заголовків певного вигляду і так далі.

У таблиці 14.2 описані найбільш споживані метасимволи, що є класами символів.

Метасимволи, перераховані в таблиці 14.3, уточнюють позицію в рядку, в якому слід шукати збіг з регулярним виразом, наприклад, тільки на початку або в кінці рядка. Ці метасимволи є уявними, тобто в тексті їм не відповідає ніякий реальний символ.

Наприклад, вираз ^cat відповідає символам cat, що зустрічається на початку рядка, вираз cat$ - символам cat, що зустрічається в кінці рядка (тобто за ними йде символ перекладу рядка), а вираз ^$ представляє порожній рядок, тобто початок рядка, за яким відразу ж слідує його кінець.

 

Таблиця 14.2

Класи символів

 

Клас символів Опис Приклад
. Будь-який символ, окрім \n Вираз с.t відповідає фрагментам cat, cut, clt.
[ ] Будь-який одиночний символ з послідовності, записаної усередині дужок. Допускається використання діапазонів символів Вираз c[aul]t відповідає фрагментам cat, cut і clt, а вираз с[a-z]t - фрагментам cat, cbt, cct, cdt,…, czt
[^] Будь-який одиночний символ, що не входить в послідовність, записану усередині дужок. Допускається використання діапазонів символів Вираз c[^aul]t відповідає фрагментам cbt, c2t, cXt и т. д., а выражение c[^a-zA-Z]t - фрагментам c1t, cCt і т.д.
\w Будь-який алфавітно-цифровий символ, тобто символ з множини прописних і рядкових букв і десяткових цифр Вираз c\wt відповідає фрагментам cat, cut, clt, /0t і т.д., але не відповідає фрагментам c{t, c;t і т.д.
\W Будь-який не алфавітно-цифровий символ, тобто символ, що не входить в множину прописних і рядкових букв і десяткових цифр Вираз c\Wt відповідає фрагментам c{t, c;t, c t і т. д., але не відповідає фрагментам cat, cut, clt і т.д.  
\s Будь-який пробільний символ, наприклад символ пробілу, табуляції (\t., \v), перекладу рядка (\n \r), нової сторінки (\f)   Вираз \s\w\w\w\s відповідає будь-якому слову з трьох букв, оточеному пробільними символами
\S Будь-який не пробільний символ, тобто символ, що не входить в множину пробільних Вираз \s\S\S\s відповідає будь-яким двом непробільним символам, оточеним пробільними
\d Будь-яка десяткова цифра Вираз c\dt відповідає фрагментам c1t, c2t,c9t
\D Будь-який символ, що не є десятковою цифрою Вираз C\Dt не відповідає фрагментам c1t, c2t, …, c9t

 

 

Таблиця 14.3

Уточнюючі метасимволи

 

Метасимвол Опис
^ Фрагмент, співпадаючий з регулярним виразом, слід шукати тільки на початку рядка
$ Фрагмент, співпадаючий з регулярним виразом, слід шукати тільки в кінці рядка
Фрагмент, співпадаючий з регулярним виразом, слід шукати тільки на початку багаторядкового рядка
\Z Фрагмент, співпадаючий з регулярним виразом, слід шукати тільки в кінці багаторядкового рядка
\b Фрагмент, співпадаючий з регулярним виразом, починається або закінчується на границі слова (тобто між символами, відповідними метасимволам \w і \W)
\B Фрагмент, співпадаючий з регулярним виразом, не повинен зустрічатися на границі слова
     

 

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

Найбільш вживані повторення перераховані в таблиці 14.4.

Таблиця 14.4

Повторення

 

Метасимвол Опис Приклад
* Нуль або більш за повторення попереднього елементу Вираз ca*t відповідає фрагментам ct, cat, caat, caaaaaaaaaaat і так далі
+ Одне або більш за повторення попереднього елементу Вираз ca+t відповідає фрагментам cat, caat, caaaaaaaaaaat і так далі  
? Жодного або одне повторення попереднього елементу Вираз ca?t відповідає фрагментам ct і cat
{n} Рівно n повторень попереднього елементу Вираз ca{3}t відповідає фрагменту caaat, а вираз (cat){2} - фрагменту catcat
{n.} Принаймні n повторень попереднього елементу Вираз са {3}t відповідає фрагментам caaat, caaaat, caaaaaaaaaaaat і так далі
{n, m} Від n до m повторень попереднього елементу Вираз ca{2,4}t відповідає фрагментам caat, caaat і caaaat

Окрім розглянутих елементів регулярних виразів можна використовувати конструкцію вибору з декількох елементів. Варіанти вибору перераховуються через вертикальну межу. Наприклад, якщо потрібно визначити, чи присутній в тексті хоч би один елемент із списку “cat”, “dog” і “horse”, можна використовувати вираз

 

cat|dog|horse

 

При пошуку використовується так званий «ледачий» алгоритм, по якому пошук припиняється при знаходженні найкоротшого з можливих фрагментів, співпадаючих з регулярним виразом.

Приклади простих регулярних виразів:

 

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

[-+]?\d+

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

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

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

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

 

Якщо потрібно описати у виразі звичайний символ, співпадаючий з яким-небудь метасимволом, перед ним стоїть символ “\”. Так, для пошуку в тексті символу крапки слід записати \., а для пошуку косої межі - \\. Наприклад, для пошуку в тексті імені файлу cat.doc слід використовувати регулярний вираз cat\.doc.

Для групування елементів виразу використовуються круглі дужки. Групування застосовується у багатьох випадках, наприклад, якщо потрібно задати повторення не для окремого символу, а для послідовності. Крім того, групування служить для запам'ятовування в деякій змінній фрагмента тексту, що збігся з виразом, взятим в дужки. Ім'я змінної задається в кутових дужках або апострофах:

 

(?<ім'я_змінної> фрагмент_виразу

 

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

 

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

 

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

Розглянемо ще один варіант застосування групування - для формування зворотних посилань. Всі конструкції, взяті в круглі дужки, автоматично нумеруються, починаючи з 1. Ці номери можна використовувати для посилань на відповідну конструкцію. Наприклад, вираз (\w)\1 використовується для пошуку здвоєних символів в словах (wall, mass, cooperate).

Круглі дужки можуть бути вкладеними, при цьому номер конструкції визначається порядком відкриваючої дужки у виразі. Приклади:

 

(Вася)\s+(дасть)\s+(?<sum>\d+)\sкрб\.\s+ Ну що ж ти. \1

У цьому виразі три під вирази взяті в дужки. Посилання на перше з них виконується в кінці виразу. З цим виразом співпадуть, наприклад, фрагменти

Вася дасть 5 крб. Ну що ж ти, Вася

Вася дасть 54356 крб. Ну що ж ти, Вася

 

Вираз, що задає 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 - ім'я змінної, в якій запам'ятовується символ \k - елемент синтаксису.

У регулярний вираз можна поміщати коментарі. Оскільки вирази зазвичай простіше писати, чим читати, це - дуже корисна можливість. Коментар або поміщається всередину конструкції (?#), або розташовується, починаючи від символу # до кінця рядка.

 

14.2.2. Класи бібліотеки.NET для роботи




Поделиться с друзьями:


Дата добавления: 2014-12-27; Просмотров: 529; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.009 сек.