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

О проекте

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

MySQL

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

Хостинг

Другое








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

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

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

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

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

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

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

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

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

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

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

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



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





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