П О Р Т А Л                            
С Е Т Е В Ы Х                          
П Р О Е К Т О В                        
  
Поиск по сайту:
                                                 
Главная

О проекте

Web-мастеру
     HTML & JavaScript
     SSI
     Perl
     PHP
     XML & XSLT
     Unix Shell

MySQL

Безопасность

Хостинг

Другое








Самое читаемое:

Учебник PHP - "Для Чайника".
Просмотров 4096 раз(а).

Иллюстрированный самоучитель по созданию сайтов.
Просмотров 6757 раз(а).

Учебник HTML.
Просмотров 3718 раз(а).

Руководство по PHP5.
Просмотров 5991 раз(а).

Хостинг через призму DNS.
Просмотров 4809 раз(а).

Подборка текстов стандартных документов.
Просмотров 56244 раз(а).

Учебник PHP - Самоучитель
Просмотров 3702 раз(а).

Документация на MySQL (учебник & справочное руководство)
Просмотров 8335 раз(а).

Внешние атаки...
Просмотров 4563 раз(а).

Учебник PHP.
Просмотров 3172 раз(а).

SSI в примерах.
Просмотров 175 раз(а).



 
 
| Добавить в избранное | Сделать стартовой | Помощь





Руководство пользователя для GNU Awk

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

4.7 Использование динамических регулярных выражений

Правая сторона в операторах `~' или`!~' не обязана быть константой regexp (т.е. цепочкой символов между слешами). Это может быть любое выражение. Выражение вычисляется и превращается, если нужно, в цепочку; содержимое цепочек используется как regexp. Каждое regexp, которое вычисляется таким образом, называется динамическим regexp.

Например:

BEGIN - identifier.regexp = "[A-Za-z.][A-Za-z.0-9]+"
"" $0 ~ identifier.regexp - print ""

присваивает идентификатору identifier.regexp значение regexp, которое описывает имена переменных awk и проверяет, соответствует ли входная запись этому regexp.

Внимание: при употреблении операторов `~' и `!~' нужно различать константы regexp, заключенные в слеши, и константы-цепочки в двойных кавычках.

Если вы используете константы-цепочки, вы должны отдавать себе отчет в том, что цепочки сканируются дважды; первый раз, когда awk читает программу, и второй раз, когда awk ищет соответствие между цепочкой в левой части оператора to match the string on the с образцом справа. Так происходит с каждым выражением, имеющем значением цепочку (таким как identifier.reggexp в примере), не являющимся просто цепочкой-константой.

Но какую разницу дает двойное сканирование цепочки? Ответ связан с управляющими последовательностями и особенно с обратными слешами. Чтобы иметь обратный слеш в регулярном выражении внутри некоторой цепочки, нужно напечатать два обратных слеша.

Например, /"*/ есть константа regexp для литерала `*'.

Нужен только один обратный слеш. Чтобы сделать то же самое с цепочкой, нужно напечатать """*". Первый обратный слеш управляет вторым, так что цепочка фактически содержит два символа `"' и `*'. Зная, что вы можете использовать и regexp и строковую константы для описания регулярного выражения, чем вы должны воспользоваться? Ответ будет: "постоянная regexp" в силу трех причин.

1. Константу -цепочку (или строковую константу) труднее писать и труднее читать. Использование константы regexp делает вашу программу более надежной. Непонимание разницы между двумя видами констант есть частый источник ошибок.

2. Употребление констант regexp делает программу эффективнее: awk может заметить, что вы употребили regexp и запомнить его в форме, более удобной для сравнения с образцом. Используя строковую константу, awk должен сначала перевести цепочку в внутреннюю форму, а затем произвести сравнение с образцом.

3. Употребление констант regexp --- предпочтительный стиль; он показывает ясно, что вы устанавливать соответствие с regexp.

Назад | Вперед
Содержание (общее) | Содержание раздела



Если Вы не нашли что искали, то рекомендую воспользоваться поиском по сайту:
 





Copyright © 2005-2016 Project.Net.Ru