![]() КАТЕГОРИИ: Архитектура-(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 Класи символів
Таблиця 14.3 Уточнюючі метасимволи
У регулярних виразах часто використовують повторення. Повторення - це метасимволи, які розташовуються безпосередньо після звичайного символу або класу символів і задають кількість його повторень у виразі. Наприклад, якщо потрібно записати вираз для пошуку в тексті п'яти що йдуть підряд цифр, замість метасимволів \d\d\d\d\d можна записати \d{5}. Такому виразу відповідатимуть фрагменти 11111, 12345, 53332 і так далі Найбільш вживані повторення перераховані в таблиці 14.4. Таблиця 14.4 Повторення
Окрім розглянутих елементів регулярних виразів можна використовувати конструкцію вибору з декількох елементів. Варіанти вибору перераховуються через вертикальну межу. Наприклад, якщо потрібно визначити, чи присутній в тексті хоч би один елемент із списку “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; Просмотров: 554; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |