Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Вся инфа.docx
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
44.52 Кб
Скачать

9) Ebnf. Для описания синтаксиса регулярных выражений в языках сценариев используются расширенные формы Бэкуса-Наура (рфбн, или, по-английски. Extended Backus-Naur Form, ebnf). Ebnf — это современная

модификация методологии, которая впервые была использована для описания языка программирования Алгол-60. За прошедшие десятилетия формы Бэкуса-Наура были доработаны множеством авторов и сейчас в расширенном виде используются для описания ряда языков программирования различной степени сложности. EBNF-нотация также широко используется в технических рекомендациях Консорциума W3C, которые фактически и являются стандартами. Нотация EBNF определяет язык как набор синтаксических правил, определяющих нетерминалы (конструкшш языка) через терминалы (символы языка), а также другие нетерминалы. Правило состоит из двух частей, разделенных символами": :=":

-----конструкция : := определение конструкции------

В левой части правила стоит терминал определяемой конструкции, в правой — выражение, определяющее эту конструкцию. Правила EBNF также иногда называют продукциями.

10) В Perl встроена мощная поддержка регулярных выражений.

Благодаря этому Perl очень эффективен для обработки текстов.

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

Оператора поиска m// записывается следующим образом:

m/шаблон/

Если значение переменной $_ содержит подстроку, соответствующую указанному шаблону, оператор поиска возвращает значение true.

В простейшем случае в качестве шаблона может быть задана последовательность символов.

print "Введите путь к файлу: ";

$_ = <INPUT>;

if (m/usr/)

{ print "В составе пути есть последовательность 'usr'\n"; }

else

{ print "В составе пути нет последовательности 'usr'\n"; }

Оператор замены записывается следующим образом:

s/шаблон поиска/выражение для замены/[набор модификаторов]

При выполнении оператора s/// производится поиск соответствия шаблону

Если поиск завершается успешно, найденная подстрока заменяется указанным выражением.

Подобно оператору m//, оператор s/// использует переменную $_.

$_ = "CGI-сценарий написан на языке С";

s/C$/Perl/;

print;

В результате выполнения сценария на консоль будет выведена следующая строка:

CGI-сценарий написан на языке Perl.

Посимвольная замена

Данный оператор записывается следующим образом:

----1г/список_поиска/список_замены/-----

Если какой-либо из символов в строке, содержащейся в переменной $_, совпадает символом из списка поиска, он заменяется символом, занимающим соответствующую позицию в списке замены. Так. Выражение

---tr/ab/cd/;

заменит все буквы а, содержащиеся в переменной $_, на букву с, а буквы b

- на букву d.

Как найти полезное применение данному оператору? Его можно использовать для замены символов в строке параметров, передаваемой CGI-сценарию, на пробелы.

tr/+/ /;

Оператор trill также удобно применять для преобразования регистра символов. Так. в результате применения оператора

tr/a-z/A-Z/;

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

Оператор связывания.

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

Переменная = - оператор_поиска_или_замены

Так, например, приведенное ниже выражение преобразует шестнадцатеричные числа, содержащиеся в переменной $string, в десятичное представление (предполагается, что шестнадцатеричные числа оканчиваются символом МН").

Функция split разделяет содержимое строки на список элементов. Она имеет следующий формат:

split(Delimeter, Str[,Limit]);

Аргумент Delimeter определяет символ, по которому осуществляется разделение, например, пробел, слово, символ табуляции и т. д. Факультативный параметр Limit задает максимальное число элементов, которое может содержать список. Следующий пример иллюстрирует использование функции split.