вторник, 30 октября 2007 г.

Использование GREP в InDesign. Часть 1. Примеры использования регулярных выражений.

Самый простой способ познакомиться с регулярными выражениями, и убедиться в их превосходстве над обычным поиском по тексту – рассмотреть несколько примеров.
Стандартный поиск по тексту в InDesign CS2 позволяет использовать четыре шаблона (^9 - для любой цифры, ^$ - для любой буквы, ^? - для любого символа и ^w - для любого пробела). Эти же шаблоны можно использовать и в InDesign CS3 во вкладке поиска по тексту (Text). Эти без сомнения полезные шаблоны, однако имеют ряд очевидных ограничений: используя эти шаблоны нельзя организовать поиск повторяющихся элементов (например, чтобы найти все числа в тексте придется последовательно перебирать сначала все числа из одной цифры, затем из двух, из трех и т.д.), так же шаблоны нельзя использовать в строке замены (можно использовать Рисунок ^9 для поиска последовательности состоящей из слова “Рисунок” и следующей за ним цифры, однако замена данной последовательности на что-либо приведет к потере цифры).
При использовании же регулярных выражений, для замены всех слов “Рисунок” с последующей цифрой на слово “Фото” с сохранением цифры, достаточно в строке поиска указать Рисунок (\d), а в строке замены Фото $1. Последовательность $1 в строке замены является указателем на результат поиска заключенный в скобки в строке поиска. Более общий случай данного примера, выглядит так: строка поиска: Рисунок (\d+), строка замены: Фото $1, и позволяет найти и заменить все слова “Рисунок” с последующим целым числом (т.е. последовательностью из одной или более цифр) на слово “Фото” с сохранением следующего числа.
Еще один пример использования регулярных выражений для поиска последовательности символов. Довольно часто возникает задача поиска последовательности из прописных букв и применения к ней символьного стиля (обычно small caps для создания капителей). Эта задача так же имеет очень простое решение при использовании GREP. Строка поиска: \u\u+, строку замены в данном случае нужно оставить пустой (так как менять мы будем только форматирование), а в поле Change Format нужно указать символьный стиль который мы хотим применить к результату поиска. Метасимвол \u в данном примере обозначает все прописные буквы, знак + как и предыдущем примере означает (один или несколько), таким образом наш поисковый запрос найдет последовательность минимум из двух прописных букв.
Другая сильная сторона GREP – использование альтернатив. Например чтобы найти слова “слон” и “клон” можно использовать выражение (с|к)лон. Расширенная версия данного выражения – (с|к)лоны? может быть использована для поиска формы множественного числа (в результате будут найдены слова “слон”, “клон”, “слоны”, “клоны”). Знак вопроса в данном выражении означает, что буква “ы” может присутствовать на конце слова, а может и отсутствовать. Еще один пример простого, но одновременно мощного выражения – д[аоуеиыэюя]м. Данное выражение соответствует такой последовательности: буква “д”, затем гласная, затем буква “м”. Эта последовательность может быть как отдельным словом (дом, дым), так и встречаться внутри более длинного слова (задуматься, дымиться). В дальнейшем мы рассмотрим как осуществлять поиск только по словам целиком. Этот пример так же демонстрирует как определить свои собственные шаблоны, в данном случае шаблон для гласных букв.
В качестве последнего примера используем задачу которая может встретиться в реальной работе. По условию задачи у нас есть список контактов, в которых среди прочей информации указан адрес электронной почты. Наша задача добавить слово “E-mail:” перед каждым адресом. Убедимся что знак “@” в тексте больше нигде не встречается, т.е. если строка содержит знак “@”, то эта строка является адресом электронной почты. Теперь нам осталось записать выражение которое означает “если строка содержит знак “@”, добавить в начале слово “E-mail”. Данное выражение записывается следующим образом ^(.+@). В поле замены указываем слово “E-mail” за которым следует результат поиска по выражению заключенному в скобки (который в каждом случае является текстом между началом абзаца и символом “@”).

воскресенье, 21 октября 2007 г.

Техническое № 1

Я таки решился включить анонимные комментарии. Надеюсь спамом не засыпит. Так что комментари всячески приветствуются.

среда, 17 октября 2007 г.

Использование GREP в InDesign CS3 Часть 0. Введение.

Этим постом я начинаю серию постов посвященных использованию GREP в InDesign CS3, для того чтобы систематизировать свои знания в данной области и собрать их в одном месте. Так же надеюсь что эти посты окажутся полезны кому-нибудь еще. (На самом деле я не уверен что кто-то еще кроме меня читает этот блог, поэтому был бы рад увидеть хоть какие комментарии)

К сожалению GREP пользуется дурной славой сложного инструмента, доступного только программистам. В действительности регулярные выражения – самый мощный, на сегоднящний день, способ поиска текстовых фрагментов в электронных документах.

Сейчас регулярные выражения используются многими текстовыми редакторами и утилитами для поиска и изменения текста на основе выбранных правил. Многие языки программирования уже поддерживают регулярные выражения для работы со строками. Однако, несмотря на сложность изучения всех аспектов использования регулярных выражений, многие задачи с которыми сталкиваются пользователи InDesign в реальной работе могут быть решены с использованием удивительно простых выражений.

Цель этих постов – показать как создавать простые, но мощные регулярные выражения.

Маленькая историческая справка.

Само название GREP произошло от набора команд g/re/p используемых в текстовом редакторе ed операционной системы UNIX. Этот набор команд осуществлял поиск по файлу строк соответствующих заданному регулярному выражению и выводил их на печать.

В следующей части будут рассмотрены примеры простых выражений и преимущества которые имеет GREP перед стандартным текстовым поиском.