Глава 16. Регулярные выражения
Пред. |  | След.

# Глава 16. Регулярные выражения

При поиске и создании правил сегментации используются регулярные выражения, поддерживаемые платформой Java. Более подробную информацию можно найти в документации Java. Ниже приведены несколько примеров и ссылок.

### Примечание

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

Таблица 16.1. Регулярные выражения - Модификаторы

Выражение | ... соответствует
--- | ---
(?i) | Включает поиск совпадений независимо от регистра символов (по умолчанию все шаблоны чувствительны к регистру)

Таблица 16.2. Регулярные выражения - Символы

Выражение | ... соответствует
--- | ---
x | Символ «x», за исключением следующих случаев…
\uhhhh | Символ с шестнадцатеричным значением 0xhhhh
\t | Символ табуляции («\u0009»)
\n | Символ новой строки («\u000A»)
\r | Символ возврата каретки («\u000D»)
\f | Символ конца страницы (команда подачи страницы для принтера) («\u000C»)
\a | Символ звонка (оповещения) («\u0007»)
\e | Символ Escape («\u001B»)
\cx | Управляющий символ, соответствующий «x»
\0n | Символ с восьмеричным значением 0n (0 ≤ n ≤ 7)
\0nn | Символ с восьмеричным значением 0nn (0 ≤ n ≤ 7)
\0mnn | Символ с восьмеричным значением 0mnn (0 ≤ m ≤ 3, 0 ≤ n ≤ 7)
\xhh | Символ с шестнадцатеричным значением 0xhh

Таблица 16.3. Регулярные выражения - Экранирование

Выражение | ... соответствует
--- | ---
\ | не соответствует ничему, только экранирует следующий за ним символ. Это нужно, если вы хотите ввести метасимволы !$()*+.<>?[\]^{|} в качестве их буквальных значений.
\\ | Например, это будет обратная косая черта.
\Q | не соответствует ничему, только экранирует все символы вплоть до \E
\E | не соответствует ничему, только прекращает экранирование, начатое \Q

Таблица 16.4. Регулярные выражения - Классы блоков и категорий Юникода

Выражение | ... соответствует
--- | ---
\p{InGreek} | Символ из греческого блока (простой блок)
\p{Lu} | Прописная буква (см. категории)
\p{Sc} | Обозначение денежной единицы
\P{InGreek} | Любой символ, кроме символов из греческого блока (исключение)
[\p{L}&&[^\p{Lu}]] | Любая буква, кроме прописных (исключение)

Таблица 16.5. Регулярные выражения - Наборы символов

Выражение | ... соответствует
--- | ---
[abc] | a, b, или c (простой набор)
[^abc] | Любой символ кроме a, b, или c (исключение)
[a-zA-Z] | Любые символы латинского алфавита, от a до z и от A до Z включительно

Таблица 16.6. Регулярные выражения - Предустановленные наборы символов

Выражение | ... соответствует
--- | ---
. | Любой символ (кроме символов конца строки)
\d | Цифра: [0-9]
\D | Не цифра: [^0-9]
\s | Любой пробельный символ: [ \t\n\x0B\f\r]
\S | Любой не пробельный символ: [^\s]
\w | Любой буквенный или цифровой символ, а также знак подчёркивания: [a-zA-Z_0-9]
\W | Любой символ кроме буквенного и цифрового, а также знака подчёркивания: [^\w]

Таблица 16.7. Регулярные выражения - Границы

Выражение | ... соответствует
--- | ---
^ | Начало строки
$ | Конец строки
\b | Граница слова
\B | Не граница слова

Таблица 16.8. Регулярные выражения - Жадные кванторы

Выражение | ... соответствует
--- | ---
X? | X, один раз или ни разу
X* | X, ноль или более раз
X+ | X, один или более раз

### Примечание

жадные кванторы будут искать как можно больше совпадений. Например, a+ для последовательности aaabbb выдаст «ааа».

Таблица 16.9. Регулярные выражения - Ленивые кванторы

Выражение | ... соответствует
--- | ---
X?? | X, один раз или ни разу
X*? | X, ноль или более раз
X+? | X, один или более раз

### Примечание

ленивые кванторы будут искать как можно меньше совпадений. Например, a+? для последовательности aaabbb выдаст только a.

Таблица 16.10. Регулярные выражения - Логические операторы

Выражение | ... соответствует
--- | ---
XY | X, за которым идёт Y
X|Y | Либо X, либо Y
(XY) | XY как отдельная группа

## 1. Инструменты для работы с регулярными выражениями и примеры использования

Существует несколько программ для разработки и тестирования регулярных выражений. В общем и целом они работают по одному и тому же принципу (пример работы программы Regular Expression Tester смотри ниже): регулярное выражение (в верхнем поле) применяется к некоему тексту (в поле посередине), результаты работы показываются в нижнем поле.

Рисунок 16.1. Regex Tester

Программа The Regex Coach для Windows, GNU/Linux и FreeBSD. Работает по описанному выше принципу.

Большое количество полезных примеров регулярных выражений можно найти и в самой ОмегаТ (смотри «Параметры» > «Сегментация»). В списке ниже приведены регулярные выражения, которые могут оказаться полезными при поиске по памяти перевода:

Таблица 16.11. Регулярные выражения - Примеры использования регулярных выражений при поиске по переводам

Регулярное выражение | Результат поиска:
--- | ---
(\b\w+\b)\s\1\b | слова, написанные дважды
[\.,]\s*[\.,]+ | точка или запятая, за которой следуют пробелы, а потом ещё одна точка или запятая
\. \s+$ | лишние пробелы после точки в конце строки
\s+a\s+[aeiou] | для английского языка: как правило, перед словами, начинающимися с гласных, нужно ставить «an», а не «a»
\s+an\s+[^aeiou] | для английского языка: проверка подобная предыдущей, но на слова, начинающиеся с согласных («a», а не «an»)
\s{2,} | больше, чем один пробел подряд
\.[A-Z] | Точка, за которой следует прописная буква, возможно, перед началом нового предложения пропущен пробел?
\bis\b | поиск «is», но не «this» или «isn't» и т. д.

Пред. |  | След.
Глава 15. Поиск | Начало | Глава 17. Словари