русс | укр

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

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

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

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


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

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


Дата добавления: 2013-12-23; просмотров: 1635; Нарушение авторских прав


Выражения отношения

В качестве шаблона может использоваться любое выражение, вызывающее сравнение между строками символов или цифр. awk имеет 6 операторов сравнения и два регулярных выражения ~ и !~. В табл. 1 перечислены все операторы и их значение.

Таблица 1 Значения операторов

Оператор Значение
< Меньше чем
<= Меньше или равно
== Равно
!= Не равно
>= Больше или равно
> Больше чем
~ Входит
!~ Не входит

 

При сравнении, если оба операнда являются цифровыми, то проводится цифровое сравнение; в противном случае - строчное. Например, шаблон:

$3 > 100

выбирает строки в которых третье поле больше 100, а программа:

$1 >= "S"

выбирает строки, которые начинаются с буквы S по букву Z:

USSR 8650 262 Asia

USA 3615 219 North America

SUDAN 986 19 Africa

При отсутствии любой другой информации awk трактует поля как строки, так что программа:

$1 == $4

сравнивает 1-е и 4-е поля как строки символов и для файла countries получим следующий результат:

Australia 2968 14 Australia

awk обеспечивает более мощные шаблоны для поиска строки символов, чем сравнение. Такие шаблоны называются регулярными выражениями. Простейшим регулярным выражением является строка символов, обрамленная знаками "/". Например:

/Asia/

Эта программа печатает все записи, которые содержат подстроку Asia (запись, содержащая Asia как часть длинной строки, подобной Asian или Pan-Asiatic, также печатается).

Чтобы ограничить поиск только для специального поля, вы можете использовать операторы ~(входит) и !~(не входит). Программа:

$4 ~ /Asia/ { print $1 }

печатает первое поле всех тех строк, в которых четвертое поле - Asia, в то время как программа:

$4 !~ /Asia/ { print $1 }



печатает первое поле всех тех строк, в которых четвертое поле - не Asia.

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

\, ^, $, ., [, ], *, ?, (, ), |

которые подобны метасимволам, используемым в shell. Например, метасимволы "^" и "$" осуществляют поиск соответственно начала и конца строки, а метасимвол "." ищет одиночный символ. Например:

/^.$/

просматривает все записи для поиска записи, состоящей из одного символа.

Если группа символов заключена в квадратные скобки, то это означает поиск одного символа из этой группы. Например, /[ABC]/ - осуществляет поиск либо символа "A", либо "B", либо "C". Границы букв или цифр могут быть обозначены внутри квадратных скобок:

/[a-zA-Z]/

Если первым символом после "[" является символ "^", то это означает: любой символ, не входящий в набор. Например:

/[^a-zA-Z]/

означает поиск любого символа, кроме буквы.

Символ "+" означает "один или больше". Например, программа:

$2 !~ /^[0-9]+$/

печатает все записи, в которых второе поле не является строкой из одной или более цифр. (^ - начало строки, [0-9]+ - одна или более цифр, $ -конец строки).

Круглые скобки используются для группирования символов, а символ | для указания альтернативы. Программа:

/(apple|cherry) (pie|tart)/

осуществляет поиск строк, содержащих одну из 4-х подстрок:

apple pie

apple tart

cherry pie

cherry tart

Чтобы отменить специальное значение метасимвола, поставьте знак "\" перед ним. Например:

/b\$/

печатает все строки, содержащие символ "b" и следующий за ним знак "$".

В дополнение к распознаваемым метасимволам, awk распознает следующие последовательности языка программирования Си внутри регулярных выражений и строк:

\b - возврат
\f - перевод формата
\n - новая строка
\r - возврат каретки
\t - табуляция
\ddd - восьмиричное значение
\" - кавычки
\c - с

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

/\t/

awk интерпретирует любую строку или переменную справа от символа "~" или "!~" как регулярное выражение. Например, мы можем записать программу:

$2 !~ /^[0-9]+$/

как

BEGIN { digits = "^[0-9]+&" }

$2 !~ digits

Предположим, что нужно найти строку символов, подобную ^[0-9]+$. Если строка "^[0-9]+$" используется как регулярное выражение, появляются дополнительные знаки "\", которые защищают регулярное выражение. Это связано с тем, что первый уровень знаков "\" удаляется при синтаксическом анализе строки. Первый уровень "\" перед символом возвращает его специальное значение в регулярном выражении, второй нужен, чтобы защитить его в строке.

Например, нужно найти строки, содержащие "b" и следующий за ним знак "$". Регулярное выражение для этого шаблона:

b\$

Чтобы создать строку для представления этого регулярного выражения, необходимо добавить еще один символ "\":

"b\\$"

Следующие регулярные выражения попарно эквивалентны:

x ~ "b\\$" x ~ /b\$/

x ~ "b\$" x ~ /b$/

x ~ "b$" x ~ /b$/

x ~ "\\t" x ~ /\t/

Регулярные выражения и подстроки, поиск которых они осуществляют, приведены в табл. 2.

Унарные операции *, +, ? имеют наивысший приоритет, затем конкатенация и затем альтернативный выбор.

Таблица 2 Регулярные выражения

Выражение Действие
с Любой, отличный от "с" мета-символ
Символ "с"
^ Начало строки
$ Конец строки
. Любой символ, кроме новой строки
[s] Любой символ из набора "s"
[^s] Любой символ, не входящий в набор "s"
r* Ноль или больше
r+ Один или больше
r? Ноль или один
(r) r
r1r2 Соединить r1 и r2
r1|r2 r1 или r2


<== предыдущая лекция | следующая лекция ==>
Шаблоны BEGIN и END | Встроенные переменные


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


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

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

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


 


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

 
 

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

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