GREP в Indesign. Введение

Рейтинг:   / 23
ПлохоОтлично 

В Индизайне есть очень полезная фишка, на которую многие не обращают внимания по незнанию, а зря. Использование GREP невероятно расширяет возможности Indesign. Какие основные отличия поиска-замены GREP, от обычного поиска-замены:

1. В отличие от обычного  поиска/замены, GREP позволяет менять данные, используя шаблоны. Как это понять?

Допустим, в 80-120-страничном издании вам нужно изменить цвет всех цен с черного, который используется по умолчанию в качестве цвета основного текста, в синий. На страницах видим от двух до десяти товарных позиций, и цены очень различные: от одной до пяти разрядов перед разделителем (запятой) и два разряда после. Представим сколько придется попотеть, делая эту работу вручную?

С помощью GREP нам достаточно написать:

\d+\,\d+ грн.

и применить к результатам поиска заранее подготовленный Character Style.

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

Допустим, в стостраничной книге 120 раз использовано слово «лопата». Заказчик требует, чтобы это слово было набрано болдом и италиком. Причем нужно учитывать все словоформы (падежи). То есть и слово «лопатой», «лопатами» и т. д. Перечитав набранное, автор решил добавить еще несколько страниц текста, которые воткнул в разные места кусочками от абзаца до страницы. Опять же прикинем, сколько времени потратим на подобную работу…

GREP позволяет написать такую последовательность:

\<лопат\w+

И т. д. Это всего лишь пара примеров, но на самом деле вариантов даже не море, а океан ;-)

Итак, немного подробнее. Но, чтобы не вдаваться в дебри, думаю лучше всего показать использование GREP в Индизайне на примерах. Так что начнем.

Для выполнения всех этих запросов используется Edit > Find/Change (Поиск и замена) и закладка GREP (регулярные выражения).


Задача №1. Расставить автоматом переносы в английских или других (не русских) языках, если язык основного текста русский.

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

в строке поиска задать: [a-zA-Z]

в строке замены ничего не задавать или ввести в нее “$0” (означает найденный текст);

в формате замены указать требуемый язык: английский.

Что это значит.

Предварительно нужно применить для всего текста русский язык. Далее ищем все слова латиницы и задаем для них английский язык. Для этого в поисковую строку вводим шаблон поиска любых символов латиницы, который выглядит так [a-zA-Z] – в нем перечисляются символы латиницы нижнего и верхнего регистра. Как вариант поиск всех символов кириллицы выглядит так “[а-яА-Я]”.

Использование GREP  в Индизайне. Des2Pro.ru

Задача №2. Найти все словоформы слова “пример” и задания ему полужирного формата.

Решение:

Строка поиска: \<(?i)приме(р|ры|ров|ре|ра)\>

Строка замены - ничего не ставим или пишем “$0”, что означает «найденный текст»;

В формате замены указать полужирный.

Что это значит?

Определяем все словоформы искомого слова. В данном случае это: “пример”, “примеров”, “примеры”, “примера”, “примере”, “примеру” (кроме “например”, “примерный” и пр. – это уже другие слова).

Теперь задаем альтернативные варианты для слов, а не для символов. В шаблонах такая возможность предусмотрена перечислением через символ “|” (вертикальная черта). В итоге строка поиска должна выглядеть: “пример|примеров|примеры|примере|примера”

Однако такой поиск не учитывает слова с заглавной буквы! Решаем эту проблему вводом метасимвола “(?i)”, который при поиске заставит игнорировать регистр. И теперь строка поиска выглядит так: “(?i)пример|примеры|примеров|примере|примера”. Можете не волноваться, регистр будет сохранен.

Учитываем еще одну проблему – система находит эти слова и как часть других других слов («например», «примерный» и т. д.), а это нам не нужно! Нужно искать слово целиком. Указываем границы слова в строке поиска – начало слова обозначается метасимволами “\<”, а конец – “\>”. В итоге наша строка поиска:

(?i)\<пример|примеры|примеров|примере|примера\>, или  так:

\<(?i)пример|примеры|примеров|примере|примера\>

Но и это можно значительно упростить! Можно написать: “приме(р|ры|ров|ре|ра)” или “пример|пример(ы|ов|е|а)”

И получаем строку: \<(?i)приме(р|ры|ров|ре|ра)\>

Дальше будет меньше воды, только коротко о самом важном.

 

Задача №3. Поиск текста в кавычках, включая кавычки. Например, для оформления италиком.

Решение:

Строка поиска: «.+?»

Строка замены - ничего не задавать или ввести в нее “$0” (означает найденный текст);

В формате замены указать оформление курсивом.

Вот некоторые метасимволы, которые заменяют обычные символы:

Метасимвол

Заменяет

Значение

. (точка)

 

Любой символ

\d

[0-9]

Цифра

\D

[^0-9]

Не цифра

\w

[A-Za-zА-Яа-я0-9_]

Символы образующие «слово» (буквы, цифры и символ подчеркивания)

\W

[^A-Za-zА-Яа-я0-9_]

Символы не образующие «слово»

\l

[a-zа-я]

Все символы в нижнем регистре

\u

[A-ZА-Я]

Все символы в верхнем регистре

\s

 

Любой пробел

\S

 

Любой не пробел

 

И теперь, если известно, что внутри кавычек содержится 5 символов,  строка поиска должна выглядеть так: “«\w\w\w\w\w»”. А если неизвестно?

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

Обозначение

Число повторений

*

Ноль или более

+

Одно или более

?

Ноль или один раз

*?

Ноль или более (короткий вариант)

+?

Одно или более (короткий вариант)

??

Ноль или один раз (короткий вариант)

{n}

n повторений

{n,}

n или более повторений

{n,m}

Минимум n и максимум m повторений

На первый взгляд кажется, что подойдет вариант “«\w+»”. Но в этом случае не учитывается присутствие пробелов внутри, а также то, что выражение может найти текст не до первой закрывающей кавычки, а, скажем, до второй. Найти текст только между соседними кавычками можно используя короткий вариант: “«\w+?»”. А чтобы учесть еще и пробел (“\s”) внутри, сделаем так: “«[\w\s]+?»”.

Практически все, но если мы столкнемся со словом «секс-машина», то система это название пропустит. Значит расширим максимально набор допустимых символов, для этого используем метасимвол “.” и получим: “«.+?»”. Вот теперь все.

 

Задача №4. Поиск выражения в кавычках, НЕ включая сами кавычки. И применить курсив (например «Золотая рыбка»).

Решение:

строка поиска - (?<=«).+?(?=»)

строка замены - ничего не задавать или ввести в нее “$0” (то есть найденный текст);

в формате замены указать оформление курсивом.

Что это значит.

Ищем текст в кавычках, но не затрагиваем сами кавычки. Для этого в шаблоне предусмотрен просмотр текста: просмотра впереди “(?<=)” и просмотр сзади “(?=)”. Искомые символы указываются внутри скобок. Символы, которые указываются в шаблоне просмотра, не учитываются в результате поиска.

Значит строку поиска вместо «.+?» нужно набрать как: (?<=«).+?(?=»)

 

Задача №5. Соединить фамилию и инициалы неразрывным пробелом.

Решение:

Строка поиска - (\u[А-Яа-я-]+)\s(\u.)\s(\u.)

Строка замены - $1~S$2~S$3

Что это значит.

Такие задачи лучше решать путем начальной разбивки и последующей сборки. В шаблонах для этого есть возможность запоминания результатов поиска. Искомые фрагменты пишутся в строке поиска в круглых скобках, а в строке замены содержимое скобок можно вызвать “$1” (первые скобки), “$2” (вторые скобки) и т.д. до “$9” (всего в Индизайне доступно 9 фрагментов) и собрать с их помощью нужную фразу.

Учитываем, что фамилия начинается с заглавной буквы, а инициалы состоят из заглавных букв, которые разделены точкой и пробелом. Например, так: “Петров В. Б.”; или так: “Путин-Полежайкин С. Н.”

В итоге шаблон поиска должен выглядеть как \u[А-Яа-я-]+\s\u.\s\u.

То есть сначала ищем заглавную букву \u, потом ищем комбинацию букв [А-Яа-я-]+, дальше инициалы \s\u.\s\u.

Но как теперь добавить неразрывный пробел? Вот тут и пригодится запоминание результатов поиска. Предварительно засунем в круглые скобки элементы шаблона:

(\u[А-Яа-я-]+)\s(\u.)\s(\u.)

Итог поиска для первых скобок (\u[А-Яа-я-]+) будет вызван как $1 (фамилия), вторых скобок (\u.)$2, третьих (\u.)$3.

А для сборки результата в строке замены заполним $1~S$2~S$3 (~S – это неразрывный пробел). Вуаля!

 

Задача №6. Обработка  e-mail-ов.

Решение:

Строка поиска - [\l\u\d\._%-]+@[\l\u\d\._%-]+

Строка замены - ничего не задаем или ввести “$0” (означает найденный текст);

в формате замены указать требуемое оформление.

Что это значит.

Здесь \l\u\d означает буквы в верхнем и нижнем регистрах и циферки, а \._%- – это допустимые в адресах символы. Учтите, что символ «точка» обозначается как “\.”, так как написание “.” является не «точкой», а метасимволом (см. задачу №3).

 

Задача №7. Обработка url (адреса в интернет).

Решение:

строка поиска - (((ht|f)tps?://|(www|ftp)\.)[^\s\n]+)(?<![\[\]\.,:;!\}\)<-])

строка замены – пусто или “$0” (найденный текст);

в формате замены указать требуемое оформление.

Что это значит.

Часть (ht|f)tps?:// ищет возможные протоколы: “http://”, “https://”, “ftp://”. Вспомним, что s?: означает, что “s” может быть, а может и не быть.

Часть (www|ftp)\. ищет начальные символы адреса – “www.” или “ftp.”

Итак, фрагмент ((ht|f)tps?://|(www|ftp)\.) ищет начало адреса URL (типа “http://www.”, “www.”, “http://”)

Дальше фрагмент [^\s\n]+ Поиск любых символов, кроме пробелов (“\s”) и перевода строк (“\n”). Значит, фрагмент (((ht|f)tps?://|(www|ftp)\.)[^\s\n]+) ищет уже полный адрес, но вместе с адресом «цепляет» и символ справа от адреса – запятую, точку и прочее. Чтобы избавиться от этих ненужных символов справа, используем комбинацию (?<![\[\]\.,:;!\}\)<-])  , которая избавляется от любого из символов [].,;!}<-. Учтите, что вместо обычной записи некоторых символов (например “.”) используется вариант “\.” – так как эти символы выполняют роль метасимволов при обычном написании.

Итог:

Регулярные выражения шикарно использовать в скриптах – это дает возможность автоматизировать обработку текста. А в Индизайн CS4 и более поздних регулярные выражения используют даже в параметрах стиля абзаца для задания оформления «на лету»!

Ну, думаю для введения достаточно. Продолжение следует.

Lider © des2pro.ru

 

Понравилась статья? Поделитесь с друзьями!

У вас недостаточно прав для добавления комментариев.
Возможно, вам необходимо зарегистрироваться на сайте.

Авторизация

Сейчас на сайте

Никого