<начальный контекст чтения>: -
параметр, являющийся контекстом поиска в файле или блоке редактирования
(для системной переменной игнорируется), который обязан заключаться в
двойные кавычки, если содержит следующие служебные символы:
пробел или , или " или ) или ] или > или :: или || или ;
Контекст может также содержать спецсимволы, используемые в таблице
контекстов; если контекст не задан, то по умолчанию его значение
устанавливается равным @ , что означает совпадение начального контекста
с началом файла, а конечного контекста - с концом файла; если конечный
контекст представляет собой пустые двойные кавычки - "", то он совпадает
с начальным контекстом; допускается задание в параметре альтернативного
контекста, в этом случае контексты, заключенные в двойные кавычки,
отделяются друг от друга спецсимволом :: , а при поиске перебираются
все допустимые сочетания заданных начального и конечного контекстов;
например, задание параметров "int func(" :: "real func(" , ")"
означает, что будет искаться вхождение контекста вида: int func( … )
или real func( … ) ;
Cпецсимволы контекста поиска:
% - контекст ищется в начале строки (следующий символ контекста -
первый в строке);
$ - контекст ищется в конце строки (предшествующий символ
контекста - последний в строке);
? - любой символ строки;
* - предыдущий символ (символьное выражение или группа) может
повторяться 0 или более раз;
+ - предыдущий символ (символьное выражение или группа) может
повторяться 1 или более раз;
[…] - символьное выражение, определяющее набор символов, допустимых
в контексте; например, [abcd] означает, что контекст может
содержать символы a или b или с или d ;
- - диапазон символов, задаваемых в выражении; например, [a-bd-z]
означает, что контекст может содержать любую букву от a до z,
кроме c ;
~ - a) операция отрицания в выражении; например, [~abc] означает,
что контекст может содержать любой символ, кроме символов
a, b или c ;
b) отрицание наличия символов в строке между найденными
группами; например, контекст поиска {aa}~{bb} в строке
aaccbbccaabb соответствует только подстроке aabb ,
т.к. между группами нет других символов;
@ - следующий символ в контексте не управляющий; например, для
поиска символа ? надо задать @? ;
| - символы контекста должны удовлетворять предыдущему (до '|')
или последующему (после '|') условиям; например, bc|d
означает, что в контексте могут быть символы abc или abd;
{…} - группа, состоящая из отдельных символов или символьных
выражений, к которой могут быть применены также операции + ,
* и |; например, {ab}|{cd};
каждая группа в шаблоне поиска нумеруется от 1 до 9 и
аналогичный номер имеет её найденный контекст; например,
каждой группе из шаблона {%a?c|d}{a?c|d}{a?c|d$} в строке
aed abc abd соответствуют три группы контекстов: 1-я группа -
aed , 2-я группа - abc , 3-я группа - abd ;
\ - следующие два символа задают 16-ное представление контекста;
например, \0d , при этом наличие этого контекста поиска
означает, что при чтении исходной строки к ней присоединяются
символы конца строки $0d$0a (соответствуют контексту \0d\0a)
и это обстоятельство позволяет задавать контекстные замены,
изменяющие или использующие конец строки;
%% - спецсимволы стоят в начале контекста поиска и задают начало
блока редактирования;
$$ - спецсимволы стоят в начале контекста поиска и задают конец
блока редактирования.