Выбрать главу

Метасимволы — варианты

Вы можете определить перечень вариантов, используя метасимвол «|» для их разделения, например, fee|fie|foe найдет «fee» или «fie» или «foe», (так же как f(e|i|o)e). В качестве первого варианта воспринимается все от предыдущего метасимвола ( или [ или от начала выражения до первого метасимвола «|», в качестве последнего — все от последнего «|» до конца выражения или до ближайшего метасимвола). Обычно, чтобы не запутаться, набор вариантов всегда заключают в скобки, даже если без этого можно было бы обойтись.

Варианты пробуются начиная с первого и попытки завершаются сразу же как удастся подобрать такой, при котором совпадет вся последующая часть выражения. Это означает, что варианты не обязательно обеспечат «жадное» поведение. Например, если применить выражение foo|foot ко входной строке «barefoot», то будет найдено «foo» так это первый вариант, который позволил совпасть всему выражению.

Обратите внимание, что метасимвол | воспринимается как обычный символ внутри перечней символов, например, [fee|fie|foe] означает ровно то же самое что и [feio|].

<(p|div)>.*</(p|div)> — найдет все корректно закрытые параграфы. Так же найдутся и включения вида <p>TEXT</div>, так что это выражение можно применять только на однородном тексте. Как альтернативный вариант можно предположить (<div>.*</div>|<p>.*</p>)

Заметьте, что применив то же выражение в жадном режиме (?g)<(p|div)>.*</(p|div)> мы не найдем ничего полезного.

Оговорка. Выражения с метасимволом «|» в FB Editor в режиме исходника НЕ ФУНКЦИОНИРУЮТ.

Метасимволы — подвыражения

У скобок в регулярных выражениях двоякая функция

1. Скобки позволяют группировать элементы (аналогично математическому использованию)

2. Скобки выделяют в исходном тексте подвыражения, на которые можно ссылаться при замене.

Вы можете обратиться к любому подвыражению в строке замены используя его номер. Подвыражения нумеруются слева направо, в порядке появления открывающих скобок. Ссылка осуществляется в виде $N, где N-номер.

Примеры группировки:

(проба){8,10} — находит строку содержащую 8, 9 или 10 копий «проба»

про([0-9]|б+)а — находит «про0а», «про1а» , «проба», «пробба», и т.д.

Примеры замены:

<p>(.*)</p> —>>— <div>$1</div> — Заменит все параграфы на разделы

((\+\d )?\(\d{3}\) )?(\d{3}(-\d\d){2}) —>>— $3 — Найдет в любом телефонном номере вида «+7 (095) 555-55-55» последнюю часть «555-55-55»

(?g)([\s\(]|\A|<br>)(http://|ftp://|https://)([^\s\)"'<>]+) —>>— $1<a href="$2$3">$2$3</a> — Такая замена преобразует все URL, встреченные в тексте, в гиперссылки.

(?g)([\s\(]|\A|<br>)(www.)([^\s\)"'<>]+)—>>—$1<a href="http://$2$3"$target>$2$3</a> — Преобразует все строки типа www.domain.root в гиперссылки

Метасимволы — обратные ссылки

Метасимволы от \1 до \9 воспринимаются как обратные ссылки. \N совпадает с ранее найденным подвыражением #N. В отличие от случая с заменой, где используются переменные $N, обратные ссылки можно применять в выражении поиска.

Примеры группировки:

(.)\1+ — находит «aaaa» и «cc»

(.+)\1+ — также находит «abab» и «123123»

(['"]?)(\d+)\1 — находит «"13"» (в дв.кавычках), или «'4'» (в один.кавычках) или 77 (без кавычек)

Модификаторы

Модификаторы служат для изменения режимов работы регулярных выражений. Они вводятся в виде (?imsgr-imsgr). Если модификатор вписан после минуса — он отключается, если нет — включается. Модификаторы подвержены группировке (в Perl нет), можно применить модификатор для отдельного участка выражения (см. пример).

Модификаторы:

i — Регистро-независимый режим. Использует выбранный в ОС язык по умолчанию. По умолчанию выключено.

m — Воспринимать входной текст как многострочный, при этом метасимволы ^ и $ будут совпадать не только в начале и конце текста в целом, но и в начале и в конце всех имеющихся в тексте строк (см. также Разделители строк). По умолчанию включено.

s — Воспринимать входной текст как одну строку. При этом метасимвол «.» совпадает с любым символом, если же этот модификатор выключен, то он не совпадает с разделителями строк (см.также Стандартные перечни символов). По умолчанию включено.

g — Включая его Вы переключаете все повторители в «жадный» режим. По умолчанию включено.

r — Модификатор предназначенный для русского языка. Если включен, то диапазоны вида а-я включают также букву «ё», А-Я включают «Ё», а а-Я включает вообще все русские буквы. По умолчанию включено.

Примеры группировки:

(?i)Saint-Petersburg — находит «Saint-petersburg» и «Saint-Petersburg»

(?i) — Saint-(?-i)Petersburg — находит «Saint-Petersburg» но не «Saint-petersburg»

(?i)(Saint-)?Petersburg — находит «Saint-petersburg» и «saint-petersburg»

((?i)Saint-)?Petersburg — находит «saint-Petersburg», но не «saint-petersburg»

Оговорка. В FB Editor модификаторы НЕ ФУНКЦИОНИРУЮТ.

При подготовке приложения использовалась документация к ClearTXT (автор — Алексей Сорокин).

Приложение E

Описание Base64

Этот алгоритм был разработан для представления произвольных последовательностей байтов в форму, читаемую для человека. Кодирующий и декодирующий алгоритмы очень просты, но закодированные данные примерно на 33% больше, чем некодированные. Этот метод идентичен тому, который используется в приложениях PEM (Privacy Enhanced Mail), описанной в RFC 1421 с одним отличием: base64 не приемлет встроенного «чистого» текста.

Base64 использует 65-символьный поднабор из US-ASCII, выделяя 6 бит на каждый печатный символ. (65-й символ «=» используется для обозначения функции спец. обработки).

Этот поднабор имеет важное свойство: он идентичен всем версиям языковой кодировки ISO 646, включая US ASCII, а также всем версиям EBCDIC. Другие популярные механизмы кодирования (uuencode, base85 — часть уровня 2 PostScript) не разделяют этих свойств и поэтому не удовлетворяют требованиям переносимости для двоичных данных электронной почты.

Процесс кодирования преобразует 3 входных символа в виде 24-битной группы, обрабатывая их слева направо. Эти группы затем рассматриваются как 4 соединенные 6-битные группы, каждая из которых транслируется в одиночный символ алфавита base64. При кодировании base64, входной поток байтов должен быть упорядочен старшими битами вперед.

Каждая 6-битная группа используется как индекс для массива 64-х печатных символов. Символ, на который указывает значение индекса, помещается в выходную строку. Эти символы выбраны так, чтобы быть универсально представимыми и исключают символы, имеющие специальное значение для SMTP-транспорта («.», CR, LF) и для синтаксиса вложенных тел MIME («-»).

 Таблица: Алфавит Base64

Выходной поток (закодированные байты) должен иметь длину строк не более 76 символов. Все признаки перевода строки и другие символы, отсутствующие в таблице 1, должны быть проигнорированы декодером base64. Среди данных в Base64 символы, не перечисленные в табл. 1, переводы строки и т.п. должны говорить об ошибке передачи данных, и, соответственно, почтовая программа должна оповестить пользователя о ней.