Создание электронных книг в формате FictionBook 2.1: практическое руководство (beta 4) | страница 51



Рассмотрим использование регулярных выражений на примере достаточно сложной, но часто встречающейся задачи – замены компьютерных кавычек «""» на типографские „«»“.

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

Обычным способом придется вызывать команду поиска\замены не менее десяти раз, рискуя что-то забыть или перепутать. Регулярные выражения позволяют произвести все замены за четыре захода.

Для начала примем за аксиому, что кавычка, расположенная в самом начале абзаца – открывающая, а в самом конце – закрывающая.

Вызываем команду Edit\Replace.

В поле поиска «Find what:» вводим конструкцию для поиска:

^"


В поле замены «Replace with:» вводим конструкцию замены. В этом случае она совсем простая:

«


Не забыв установить флажок «Regular expression», нажимаем кнопку«Replace All».

Аналогично, для кавычки в конце абзаца конструкции поиска и замены будут:

"$


и

»


Выражения «^» и «$» называются литераламии обозначают начало и конец строки соответственно. В конструкции замены они не нужны.

Теперь обработаем оставшиеся кавычки.

Начнем с открывающей кавычки. Перед ними обычно идет пробел. Ну, иногда еще дефис или скобка.

Конструкция для поиска будет такая:

([\s\(-])"


Конструкция замены:

$1«


В квадратных скобках мы перечислили символы, один изкоторых может идти перед искомой кавычкой. Литерал «\s» обозначает пробельный символ. Символ «скобка» является зарезервированным, так как используется в самих конструкциях регулярных выражений, поэтому, чтобы искать его в тексте, мы отделили его косой чертой. Заключив все это в круглые скобки, мы образовали выражение, к которому будем обращаться из строки замены. И в конце непосредственно сама искомая кавычка.

Символ, который идет перед кавычкой, нужно оставить в неприкосновенности. Поэтому в поле замены вводится обращение к выражению в строке поиска – $1.

Теперь закрывающая кавычка. После нее могут идти: пробел, запятая, точка, закрывающая скобка, вопросительный знак, восклицательный знак, дефис, символ «многоточие».

Конструкция поиска:

(\S)"([\s\!\.\)-…,?:;])


Конструкция замены:

$1»$2


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

Напоследлк должен заострить ваше внимание, что в режиме исходника FB Editor регулярные выражения функционирует несколько по-другому. В частности, не получается использовать метасимвол «|», некорректно обрабатываются перечни, содержащие кириллицу.