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

О проекте

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

MySQL

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

Хостинг

Другое








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

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

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

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

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

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

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

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

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

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

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

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



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





Руководство пользователя для 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