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

О проекте

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

MySQL

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

Хостинг

Другое








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

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

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

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

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

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

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

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

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

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

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

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



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





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

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

4.3 Операторы регулярных выражений

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

Управляющие последовательности, описанные выше, в разделе 4.2 [Управляющие последовательности], стр. 24, действуют внутри regexp. Они вводятся с помощью `"'. Они распознаются и конвертируются в соответствующие реальные символы на самом первом шаге обработки regexp.

Приведем таблицу метасимволов. Все символы, не составляющие управляющие последовательности и которые не перечислены в таблицы, представляют сами себя.

"  используется для уничтожения специального значения символа при установке соответствия. 

Например,  "$ означает символ `$'.

^ соответствует началу цепочки. Например, ^@chapter соответствует `@chapter' в начале цепочки и может использоваться для идентификации начала главы в исходных файлах Texinfo. `^' называется якорем, поскольку он побуждает образец сравниваться только с началом цепочки. Важно знать, что якорь `^' не соответствует началу строки, вложенной в цепочку.

В следующем примере условие не выполнено:

if ("line1"nLINE 2" ~ /^L/) ...

$ аналогично `^', но отмечает только конец цепочки. Например, p$ соответствует записи, которая оканчивается на `p'. `$' тоже якорь и тоже не означает конец строки, вложенной в цепочку.

В следующем примере условие имеет значение ложь:

if ("line1"nLINE 2" ~ /1$/) ...

. точка соответствует любому одиночному символу, включая символ newline. Например, .P соответствует любому одиночному символу, предшествующему в цепочке букве `P'.

Использую конкатенацию, мы можем строить регулярные выражения по примеру `U.A', представляющему любую трехсимвольную последовательность, начинающуюся с `U' и кончающуюся на `A'. В строгом режиме POSIX (см. раздел 14.1 [Параметры командной строки], стр. 161), `.' не соответствует пустому символу, все биты которого равны 0. В остальных случаях пустой символ рассматривается как обычный символ. Другие версии awk не могут обнаруживать пустой символ.

[...] называется списком символов. Он соответствует любому из символов, заключенных в квадратные скобки. Например, [MVX] соответствует любой из букв `M', `V' или `X' в цепочке. Диапазоны символов указываются с помощью дефиса между начальным и конечным символами и заключением всего выражения в квадратные скобки. Например, [0-9] означает любую цифру. Допустимы и кратные диапазоны. Например, список [A-Za-z0-9] есть обычный способ указания всех латинских букв и цифр.

Чтобы включить один из символов `"', `]', `-' или `^' в список символов, поставьте перед ним `"'.


Например:

 [d"]] означает  `d' или  `]'. 
 

Такое использование `"' в списке символов совместимо с другими реализациями awk и допускается в POSIX. Регулярные выражения в awk образуют супермножество спецификаций POSIX для Расширенных Регулярных Выражений (EREs). POSIX EREs основаны на регулярных выражениях, принятых в традиционных утилитах l egrep. Классы символов представляют новую черту, введенную в стандарт POSIX. Символьный класс есть специальное обозначение для описания списков символов, имеющих специальные атрибуты, но где сами фактические символы могут меняться от страны к стране и/или от одного символьного множества к другому. Например, понятие буквенного символа в США отличается от того же во Франции.

Символьный класс имеет смысл только в внутри скобок символьного списка. Символьный класс состоит из `[:', ключевого слова класса, и `:]'.

Приведем символьные классы, определенные в стандарте  POSIX.

[:alnum:]      Буквенно-цифровые символы.

[:alpha:]      Буквенные символы.

[:blank:]      Пробелы и знаки табуляции.

[:cntrl:]      Управляющие символы.

[:digit:]      Цифры.

[:graph:]      Символы, которые и печатны и одновременно видимы. (Пробел
               печатный, но невидимый, а `a' печатен и видим.)

[:lower:]      Буквы нижнего регистра.

[:print:]      Печатные символы (символы, не являющиеся управляющими.)

[:punct:]      Знаки пунктуации (не буквы, цифры, управляющие или пробелы.)

[:space:]      Знаки пробелов (пробел, tab, formfeed).

[:upper:]      Буквы верхнего регистра.

[:xdigit:]     Шестнадцатеричные цифры.

Например, до стандарта POSIX, для выделения букв и цифр нужно было писать /[A-Za-z0-9]/. Если ваше множество содержит и другие буквы, они не будут обнаружены. С помощью классов POSIX можно писать /[[:alnum:]]/, что будет отвечать всем буквам и цифрам вашего символьного множества.

Две дополнительные специальные последовательности могут фигурировать в символьных списках. Они относятся к не-ASCII символьным множествам, которые могут иметь отдельные символы (называемые упорядочивающими элементами), представляемые более чем одним символом, или группы символов, которые равнозначно используются в целях упорядочивания или сортировки. (Например, во Франции простое "e" и имеющее аксант-граф "`e" эквивалентны.)

Сортирующие символы (Collating Symbols)

Сортирующий символ есть многосимвольный упорядочивающий элемент, заключенный в `[.' и `.]'. Например, если `ch' есть упорядочивающий элемент, то [[.ch.]] есть regexp, которое соответствует этому упорядочивающему элементу, в то время как [ch] есть regexp, которое соответствует либо `c' либо `h'.

Классы эквивалентности

Класс эквивалентности есть региональное специальное имя для списка символов, которые эквивалентны. Это имя заключается в `[=' и `=]'. Например, имя `e' может использоваться для представления всех "e," "`e," и "'e." В таком случае [[=e]] есть regexp, соответствующий любому из `e', `'e', или ``e'. Эти черты очень ценны в не англоязычных регионах.

Внимание: библиотечные функции, которые gawk использует для регулярных выражений, соответствуют только признанным в POSIX классам символов; они не распознают упорядочивающих символов или классов эквивалентности. [^ ...] есть дополнение к списку символов (первый символ после `[' должен быть`^'). Оно соответствует любым символам кроме тех, которые находятся в квадратных скобках.

Например, 

	[^0-9]	соответствует любому символу, кроме цифр.

	--  	представляет оператор альтернативы и 
		 используется для указания альтернатив.
		  
Например,

   ^P--[0-9]  соответствует любой цепочке, 
		которая соответствует либо
					  
`^P' либо `[0-9]'.
		    То есть это соответствует всякой цепочке,
 		    которая начинается с `P' или содержит цифру.

Альтернатива связывает наибольшие возможные regexp с обеих сторон. Другими словами, `--' имеет наинизший приоритет среди всех операторов над регулярными выражениями.

Скобки (...) используются для группировок в регулярных выражениях, как и в арифметических. Они могут использоваться для конкатенации регулярных выражений, содержащих оператор альтернативы `--'. Например, `@(samp--code)"-[^""]+"""' соответствует как `@code-foo""' так и `@samp-bar""'. (Они являются форматирующими управляющими последовательностями для Texinfo.)

* Звездочка означает, что предшествующее регулярное выражение должно быть повторено столько раз, сколько необходимо для получения соответствия.

Например, ph* означает применение символа `*' к предшествующему `h' и соответствует `p' с следующими за ним любым количеством `h' ( в том числе и нулевым, то есть одному `p'). `*' повторяет наименьшее возможное предшествующее выражение (используйте скобки, если нужно повторить большее выражение) любое количество раз.

Например,

awk '/"(c[ad][ad]*r x")/ - print ""' sample

печатает каждую запись из `sample', 
содержащую цепочку вида

`(car x)', `(cdr x)', `(cadr x)', и т. д. 

Заметьте исключение скобок посредством 
предварения их обратными слешами.

+ Этот символ действует подобно `*', но предшествующее выражение должно быть повторено по крайней мере один раз. Это значит, что wh+y соответствует `why' и `whhy', но не `wy', в то время как `wh*y' соответствует всем трем приведенным цепочкам.

Вот более простой способ записи последнего примера на `*' :

awk '/"(c[ad]+r x")/ - print ""' sample

? Этот символ также действует подобно `*', но предшествующее выражение повторяется или раз или ни разу. Например, fe?d соответствует `fed' и `fd', и ничему другому.

-n"" -n,"" -n,m"" Одно или два числа внутри фигурных скобок означают интервальное выражение. Если в фигурных скобках стоит одно число, предшествующее regexp повторяется n раз. Если там два числа, разделенные запятой, то предшествующее regexp должно повторяться от n до m раз. Если имеется одно число с последующей запятой, то предшествующее regexp должно повторяться не меньше чем n раз.

wh-3""y соответствует `whhhy', но не `why' или `whhhhy'. wh-3,5""y соответствует только `whhhy' или `whhhhy' или `whhhhhy'. wh-2,""y соответствует `whhy' или `whhhy', и т.д.

Интервальные выражения традиционно не использовались в awk. Как часть стандарта POSIX, они добавлены, чтобы сделать awk и egrep совместимыми друг с другом.

Однако, поскольку старые программы могут использовать `-' и `""' в константах regexp constants, по умолчанию gawk не обрабатывает интервальные выражения в regexp. Если указаны либо `--posix' либо `--re-interval' (см. раздел 14.1 [Параметры командной строки], стр. 161), то интервальные выражения допускаются в regexp.

В регулярных выражениях операторы `*', `+' и `?', также как и фигурные скобки `-' and `""', имеют наивысший приоритет, затем идет конкатенация и, наконец, `--'. Как и в арифметике, круглые скобки могут изменить порядок действий.

Если gawk дейсвует в режиме эмуляции (см. раздел 14.1 [Параметры командной строки], стр. 161), классы символов и интервальные выражения недопустимы в регулярных выражениях.

В следующем разделе обсуждаются специальные для GNU операторы регулярных выражений и рассматриваются детали того, как влияют параметры командной строки на способ интерпретации в gawk символов в регулярных выражениях.

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



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





Copyright © 2005-2016 Project.Net.Ru