русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Использование обратных ссылок


Дата добавления: 2015-07-09; просмотров: 743; Нарушение авторских прав


Существует специальная конструкция, позволяющая в регулярном выражении обращаться к уже найденной с помощью символов группировки подстроке. Она называется обратной ссылкой (back reference) и записывается так: \1, что значит повтор строки, удовлетворившей регулярному выражению — группи- ровке, которое было указано в регулярном выражении до вхождения символа обратной ссылки. Например, требуется получить список всех пользователей системы, у которых имя (первое поле /etc/passwd) совпадает с именем испол- няемого файла оболочки (последнее поле /etc/passwd). Такую задачу можно решить, используя обратную ссылку (пример 9.12).

 

Пример 9.12. Поиск с обратной ссылкой с помощью egrep

 

$ egrep '^(.+):.*\1$' /etc/passwd sync:x:5:0:sync:/:/bin/sync shutdown:x:6:0:shutdown:/:/sbin/shutdown halt:x:7:0:halt:/:/sbin/halt


 

В этом регулярном выражении шаблоном для имени пользователя является

^(.+):, т. е. строка из ненулевого количества любых символов. При этом специально использован символ группирования, т. к. с помощью него запо- минается строка символов, соответствующая имени пользователя. Далее эта же найденная строка с помощью обратной ссылки \1 сравнивается с именем файла оболочки.

Вообще говоря, приведенный пример 9.12 не будет работать в других опера- ционных системах, если в них не используется GNU-версия grep. Это связано с концептуальной невозможностью использования обратных ссылок в про- граммах поиска подстрок, реализующих расширенный синтаксис регулярных выражений. GNU-версия egrep (он же grep) обеспечивает возможность по- иска строк с использованием обратных ссылок.

Далее приведен более корректный пример 9.13, который не использует

egrep.

 

Пример 9.13. Поиск с обратной ссылкой с помощью grep

 

$ grep '^\(..*\):.*\1$' /etc/passwd sync:x:5:0:sync:/sbin:/bin/sync shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown halt:x:7:0:halt:/sbin:/sbin/halt



 

В регулярном выражении может быть задано более одного символа обратной ссылки. Если используется более одной обратной ссылки, то должно быть указано несколько символов группировки, а номера у обратных ссылок должны соответствовать порядковым номерам вхождений символов группи- ровки в регулярном выражении.

Например, требуется получить список всех IP-адресов и имен хостов из фай- ла /etc/hosts (который связывает IP-адрес и имя компьютера в сети) только для тех хостов, чьи IP-адреса начинаются либо со 127, либо со 192 (при- мер 9.14). Кроме того, у этих хостов должны быть одновременно указаны полностью определенное доменное имя (Fully Qualified Domain Name, FQDN) и короткое имя (или наоборот — порядок не важен).

 

Пример 9.14. Использование нескольких обратных ссылок

 

$ egrep '^(192|127)\..*([[:alnum:]]+)\..*\2$' /etc/hosts

127.1.1.1 localhost.localdomain localhost


 

В примере 9.14 первый символ группирования предназначен для организации перечисления (инфиксного оператора ИЛИ), а второй — для организации поиска по обратной ссылке. Так как искомые имена компьютеров могут быть определены по второму символу группирования, то используется оператор обратной ссылки \2.

 



<== предыдущая лекция | следующая лекция ==>
ЗАДАНИЯ | ЗАДАНИЯ


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

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