# Руководство по использованию редактора регулярных выражений

## Введение

Редактор регулярных выражений предназначен для редактирования регулярных выражений в графическом виде (конвертации из контрастной формы представления в вид текстовых - ASCII строк). Традиционнно, регулярные выражения имеют ASCII синтаксис, к примеру: `^.*kde\b`. Основными недостатками данного стиля являются:

- Трудности в адекватном воспиятии для людей не занимающихся программированием.

- Требуется, чтобы вы избегали определенных символов (чтобы использовать символ звёздочки, например, вам придётся набрать `\*`).

- Требуется, чтобы вы постоянно помнили и соблюдали правила приоритетов выполнения (Что делает операция `x|y*`? Значение `x` или множество `y`, ИЛИ множества `x` и `y` смешаны?)

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

## Что такое регулярные выражения

Регулярные выражения являются способом для определения условий, которыми мы обычно мысленно описываем ситуацию. Обычно, в текстовом редакторе, для поиска вы используете какоие-то конкретные фразы., использование регулярных выражений позволяет описать: на что должно быть похожим искомое. К примеру, Я ищу слово КДЕ стоящее в начале строки, или Я ищу слово `the`, находящееся на месте, или Я ищу файлы начинающиеся со слова `test` и последующих цифр, к примеру `test12`, `test107` и `test007`

Вы можете строить регулярные выражения, используя более мелкие регулярные выражения, подобно тому как строятся большие дома из маленьких кирпичей. Так как в строительстве существует множество материалов, то далее мы постараемся на примерах рассказать вам об основных кирпичах, тем самым заложив фундамент для построения регулярных выражений.

### Поиск обычного текста

Оговоримся сразу, что регулярные выражения не являются наилучшим способом поиска строк в тексте. Причина кроется в том, что в регулярных выражениях некоторым символам присвоены специальные значения. Среди них следующие: `.*|$`. Таким образом, если вы хотите найти в тексте `kde.` (то есть слово `kde` с точкой), то вам придётся набрать `kde\.`

Редактор регулярных выражений выполнит все необходимые формальности за вас

, записав `\.` вместо `.`, т.е. вставив эскейп-последовательность вместо символа.

### Обнаружение URL (ссылки на ресурс в интернете)

Когда вы выбираете нечто похожее на URL в КДЕ, то программа `klipper` предложить вам открыть этот URL при помощи `konqueror`.

`Klipper` осуществляет свой выбор, руководствуясь результатами сопоставления нескольких регулярных выражений, когда одно из регулярных выражений выдаст положительный результат, тогда и будет предложен адекватный вариант.

Регулярное выражение для URLs содержит (кроме всего прочего) условие, что текст должен начинаться с `http://`. С помощью регулярного выражения это условие можно описать следующим образом: `http://` со шляпой (с символом `^`).

Предыдущий пример показывает, как с помощью регулярных выражений можно осуществлять указание на расположение искомого в тексте (сопоставление позиции). Аналогично можно указать на то, что искомое находится в конце строки , для этого используется символ `$` (символ доллара - зелёных американских денег).

### Поиск слова `the`, но не the `re`, `brea` the или `ano` the `r`

По образу и подобию вышеизложенного могут быть указаны ещё два дополнительных условия при поиске, а именно: позиция на границе слова (в начале, либо конце) и не на границе слова. Для обозначения этих условий применяются обозначения `\b` (указание на границу слова) и `\B` (не на границе слова).

Таким образом слово `the` можно найтивоспользовавшись регулярным выражением `\bthe\b`. Этим мы указываем, что ищем просто слово `the` без каких-бы то ни было довесков перед- и -после слова (т.е с границами по каждой из сторон слова)

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

### Поиск всех `this` или `that`

Представьте себе, что вы хотите найти в документе слово `this` или слово `that`. При обычном поиске вам нобходимо сделать два прохода: в перый произвести поиск слова `this`, во второй `that`.

Используя регулярные выражения вы можете сделать всё это за один приём. Для этого запишите выражение следующим образом: `this|that`, т.е. разделите оба искомых слова вертикальной чертой (обычно, клавиша Shift+правый верхний угол алфавитно - цифровой клавиатуры, рядом с забоем)

Примечание: по обе стороны от вертикальной черты могут находиться не только искомые слова, но и два регулярных выражения.

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

### Сопоставление чего-либо

Регулярные выражения часто сравнивают с шаблоном, использующемся в коммандном интерпретаторе (оболочке, или shell), где можно определить множество файлов используя звёздочку. Вы несомненно узнаете шаблон в следующих примерах:

- `rm *~` - здесь `*~` является шаблоном, указывающим на то, что необходимо выбрать (и удалить) все файлы, заканчивающиеся на `~`

- `cat test??.res` - вывод всех файлов, начинающихся с `test`, далее, в названии которых следуют два любых символа, и заканчивающихся на `.res` (с расширением `.res`).

В шелле звёздочка указывает, что любой символ может встретиться в названии любое количество раз, другими словами, звёздочка означает всё что угодно. В регулярном выражении подобное условие задаётся при помощи записи `.*`. Точка указывает, что может быть один произвольный символ, в свою очередь звёздочка сообщает, что предыдущее регулярное выражение может соответствовать любое количество раз. Вместе они задают условие поиска: любой единичный символ может быть встречен произвольное количество раз.

Это может на первый взгляд показаться черезмерно сложным, но когда вы увидите всю картину работы регулярных выражений, то сможете по достоинству оценить всё их изящество. Позольте продемонстрировать ещё одно основное выражение: `a`. Эта запись указывает, что регулярное выражение ищет соответствие одиночному символу `a`. Если объединить эту запись со звёздочкой, т.е. `a*`, то получится регулярное выражение допускающее любое количество символов a.

Можно объеденять несколько регулярных выражений последовательно, например `ba(na)*`. Запись

`(na)*` указывает, что строка в скобках может быть повторена любое количество раз

. Представьте себе, что работая в текстовом редакторе, вы должны найти следующие слова: `ba`, `bana`, `banana`, `bananananananana`

Как сказано выше, для вас не составляет труда записать шаблон шелла: `test??.res` через регулярное выражение: `test..\.res`. Вообщето точка означает любой символ. Для того чтобы указать что нужна именно точка, вы должны записать `\.`

Здесь использована эскейп - последовательность

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

В редакторе регулярных выражений повторяющиеся выражения могут быть вставлены с использованием повторить

### Замена `&` на `&amb;` в HTML документе.

В HTML документе, для того чтобы отображался специальный символ `&`, его необходимо записать как `&amp;` - по аналогии с тем, как происходит замена служебных символов на эскейп последовательности в регулярных выражениях.

Представьте себе, что вы набрали документ HTML в обычномтекстовом редакторе (допустим XEmacs, Kate или Notepad), и полностью забыли про эти правила. Для того чтобы устранить ошибку необходимо заменить все записи `&` на `&amp;`.

Эта операция может быть достаточно просто реализована с использованием традиционных средств поиска-замены, однако возможны некоторые осложнения. Представьте себе, что что вы периодически вспоминали об этих правилах, т.е. местами у вас записано правильно. В этом случае все ошибочные варианты будут заменены на правильные `&amp;`, а в тех местах где было записано правильно, возникнет новая ошибка: `&amp;amp;`

На самом деле вы хотите произвести замену записи `&`, только в том случае, если за ней не стоит `amp;`. Для этого вы должны воспользоваться регулярными выражениями использующими запрещения.

Для того чтобы выполнить условие, при котором за искомым не должно стоять `amp;`, необходимо записать следующее выражение: `&(?!amp;)`. Гораздо проще всё будет выглядеть в редакторе регулярных выражений, если вы воспользуетесь инструментами запрета/расширения.

## Использование редактора регулярных выражений

В этой главе рассказывается о работе непосредственно с редактором регулярных выражений

### Организация рабочего окна

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

Выше области редактирования расположены две панели инструментов. Первая панель содержит средства редактирования и очень похожа на инструменты для рисования в графических программах. Вторая панель содержит кнопку Что это? и кнопки отмены/повтора.

Ниже области редактирования находится строка регулярного выражения в текстовом (ASCII) виде. Все изменения, вносимые в графическом редакторе переносятся в текстовую форму. Если вы захотите поправить регулярное выражение в текстовом виде - то все изменения также будут внесены в графическое представление.

Наконец, слева относительно области редактирования вы найдёте множество заготовок регулярных выражений. Они служат для достижения двух целей: (1) Когда вы используете редактор, эти выражения являются более качественными или, если хотите, более исчерпывающими, заменяя общие регулярные выражения.На рисунке выше вы можете увидеть, как текстовое представление ".*" заменяется на шаблонное "всё что угодно".(2) Вы можете использовать эти заготовки в качестве строительного материала для построения своих регулярных выражений. За более исчерпывающей информацией обратитесь к разделу регулярные выражения, определяемые пользователями, в нём содержится подробная информация о том, как сохранить ваши собственные регулярные выражения.

### Инструменты

В этой главе предполагается, что вы изучили главу что такое регулярные выражения, и имеете представление, о чём идёт речь.

Все инструменты расположены на панели инструментов, расположенной выше, относительно области редактирования. Далее будет описан каждый из инструментов.

#### Выделение

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

#### Текст

#### Символы

Используя этот инструмент вы определяте области значений символьных величин. К примеру, что в тексте содержатся символы `[0-9]`, `[^a-zA-Z,_]`. Если вы воспользовались данным инструментом, то должен появиться диалог, в котором оределяются области значений символьных величин.

Смотрите также описание повторение регулярных выражений .

#### Инструменты для работы с символами

Регулярное выражение "точка" (.). Точка соответствует любому символу в единичной позиции.

#### Средства повторения

Повторяющиеся элементы. Включают в себя звёздочку (*), плюсик (+), знак вопроса (?), и области ({3,5}). Если вы используете этот иструмент, то появится диалог, в котором вы должны указать необходимое количество повторов.

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

Повторяемые элементы выражения можно взять извне, затем поместить в квадрат. Также вы можете сперва нарисовать то что потом должно будет быть повторено, а затем выбрать инструмент повторения. И наоборот: вы можете сперва вставить повторитель, а затем нарисовать внутри него повторяемое.

Смотри описание повторяемые регулярные выражения.

#### Альтернатива

Задание альтернативы - это использование оператора(|). Вы рисуете другой вариант поверх имеющегося, после того как в редакторе появится новый квадратик для ввода.

Смотрите раздел альтернативные регулярные выражения

#### Комбинированные средства

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

#### Обслуживание начала/конца строк

Инструменты начала и конца строк указывают на соответствие условиям начала и конца строки. Регулярное выражение, в приведённом выше примере рабочего окна редактора, не содержит символов соответствия начала/конца строк.

Смотри описание сопоставление позиций в регулярных выражениях.

#### Инструменты границы (содержимого) слова

Инструментальные средства границ позволяют задавать условия соответствие границам или содержимому слова. Регулярное выражение изображённое на картинке показывает соответствие для любых слов, начинающихся с `the`. Само слово `the` не попадает под это условие.

Смотри описание границы в регулярных выражениях.

#### Инструментальные средства Разрешения/Блокировки

Инструментальные средства наложения условий разрешения/ блокировки определяют будут ли приняты результаты по конкретному условию.Частное решение, тем не менее, не является частью общего решения.

Примечание: вам разрешается устанавливать блокировки только в конце регулярного выражения. Редактор регулярных выражений не работает с ними.

Смотри описание блокировки и разрешения в регулярных выражениях.

### Регулярные выражения, определяемые пользователем

Слева от области редактирования расположена зона для регулярных выражений, определяемых пользователем. Несколько регулярных выражений занесено в этот список непосредственно после установки КДЕ, тогда как другие вы можете внести и сохранить самостоятельно.

Данные регулярные выражения обеспечивают достижение двух целей: (см. более подробное описание), а именно: 1) Обеспечивают вас блоками для строительства регулярных выражений 2) делают регулярные выражения более понятными.

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

Если регулярное выражение сохраняется в составе Комбинированных средств, то оно может участвовать в создании последующих регулярных выражений.

Регулярные выражения определяемые пользователем могут быть переименованы или удалены щелчком правой кнопки мыши на их названии в списке.

## Как сообщить о пожеланиях и замеченных ошибках

Замеченные ошибки и пожелания направляйте по адресу: Система отслеживания ошибок КДЕ, в обязательном порядке предварительно, убетитесь в том, что эта или аналогичная ошибки не были зафиксированы: сообщения / пожелания

## Часто задаваемые Вопросы - Ответы (ЧаВО)

### Поддерживает ли редактор регулярных выражений обратные ссылки?

В настоящий момент нет, но планируется к реализации в следующей версии.

### Будет ли в редакторе регулярных выражений предусмотрена возможность отображения результатов ?

Нет, но будем надеяться, что будет реализовано в следующей версии.

### Я являюсь автором программы для КДЕ, как я могу использовать ваш редактор в своём приложении?

См. Документация для класса KRegExpEditorInterface

### Я не могу найти кнопку редактировать регулярные выражения , допустим, в обозревателе, после переустановки КДЕ3, почему ?

Инструментарий для работы с регулярными выражениями относится к утилитам КДЕ (пакет kdeutils). Если вы не установили этот пакет, то кнопка редактировать регулярные выражения не появится в соответствующих программах.

## Лицензии и разрешения

Авторские права на документацию 2001, Jesper K. Pedersen blackie@kde.org Перевод (с)2002 Клютченя А.Л. asoneofus@kde.ru

&underGPL; &underFDL;