Регулярные выражения ICU

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

Этот справочник представляет собой выдержки из публикации ICU User Guide (Руководство пользователя ICU). Здесь описаны особенности реализации регулярных выражений ICU. Если вы используете регулярные выражения Agent Builder, то вы должны быть знакомы с этими особенностями, так как разные языки программирования реализуют регулярные выражения по-разному.

Табл. 1. Метасимволы в регулярных выражениях
Символ Описание
\a Задает вхождение BELL, \u0007
\A Задает вхождение с начала входных данных. Отличается от ^ тем, что \A не задает сопоставление после символа перевода строки во входных данных.
\b, вне [Set] Задает вхождение, если текущая позиция - это граница слова. Граница - это переход между символами слова (\w) и не слова (\W); сочетающие знаки игнорируются. Дополнительную информацию о границах слов смотрите в публикации ICU Boundary Analysis (Анализ границ ICU).
\b, в [Set] Задает вхождение BACKSPACE, \u0008
\B Задает вхождение, если текущая позиция - это не граница слова.
\cX Задает вхождение символа Ctrl-X.
\d Задает вхождение любого символа, относящегося к общей категории Unicode Nd (Number, Decimal Digit - число, десятичный разряд).
\D Задает вхождение любого символа, кроме десятичной цифры.
\e Задает вхождение ESCAPE, \u001B.
\E Задает окончание 'экранированной' последовательности \Q... \E.
\f Задает вхождение символа конца страницы, \u000C.
\G Задает вхождение, если текущая позиция находится в конце предыдущего вхождения.
\n Задает вхождение символа перевода строки, \u000A.
\N{ИМЯ СИМВОЛА UNICODE) Задает вхождение указанного символа.
\p{ИМЯ СВОЙСТВА UNICODE) Задает вхождение любого символа с указанным свойством Unicode.
\P{ИМЯ СВОЙСТВА UNICODE) Задает вхождение любого символа, не обладающего указанным свойством Unicode.
\Q 'Экранирует' все последующие символы до символа \E.
\r Задает вхождение символа возврата каретки, \u000D.
\s Задает вхождение пустого символа. Пустой символ определяется как[\t\n\f\r\p{Z}].
\S Задает вхождение непустого символа.
\t Задает вхождение горизонтального табулятора, \u0009.
\uhhhh Задает вхождение символа с шестнадцатиричным значением hhhh.
\Uhhhhhhhh Задает вхождение символа с шестнадцатиричным значением hhhhhhhh. Нужно задать ровно 8 шестнадцатиричных разрядов, несмотря на то, что максимальное значение кода символа в Unicode - \U0010ffff.
\w Задает вхождение словесного символа. Словесные символы - это [\p{Ll}\p{Lu}\p{Lt}\p{Lo}\p{Nd}].
\W Задает вхождение несловесного символа.
\x{hhhh} Задает вхождение символа с шестнадцатиричным значением hhhh. Можно задать от 1 до 6 шестнадцатиричных разрядов.
\xhh Задает вхождение символа с двухразрядным шестнадцатиричным значением hh.
\X Задает вхождение кластера графем.
\Z\ Задает вхождение, если текущая позиция находится в конце ввода, но до конечного завершителя строки, если он существует.
\z Задает вхождение, если текущая позиция находится в конце ввода.
\n Обратная ссылка. Задает вхождение любой подходящей n-ной группы записи в шаблоне. n должно быть числом > 1 и < общего числа групп захвата в шаблоне.
Прим.: Восьмеричные управляющие символы (например, \012) не поддерживаются в регулярных выражениях ICU.
[шаблон] Задает вхождение любого одного символа из набора. Полное описание символов, которые могут входить в шаблон, смотрите в UnicodeSet
. Задает вхождение любого одного символа.
^ Задает вхождение в начале строки.
$ Задает вхождение в конце строки.
\ 'Экранирует' последующий символ. Следующие символы должны быть экранированы, чтобы они обрабатывались как литералы: * ? + [ ( ) { } ^ $ | \ . /
Табл. 2. Операторы регулярных выражений
Оператор Описание
| Задает один из вариантов. A|B указывает, что подходит вхождение или A, или B.
* Задает число вхождений от 0 и больше. Число вхождений должно быть как можно больше.
+ Задает число вхождений от 1 и больше. Число вхождений должно быть как можно больше.
? Задает ноль вхождений или одно вхождение. Предпочтительно одно.
{n} Задает ровно n вхождений
{n,} Задает число вхождений, равное, как минимум, n. Число вхождений должно быть как можно больше.
{n,m} Задает число вхождений от n до m включительно. Число вхождений должно быть как можно больше, но не более m.
*? Задает число вхождений от 0 и больше. Число вхождений должно быть как можно меньше.
+? Задает число вхождений от 1 и больше. Число вхождений должно быть как можно меньше.
?? Задает ноль вхождений или одно вхождение. Предпочтительно ни одного.
{n}? Задает ровно n вхождений
{n,}? Задает число вхождений, равное, как минимум, n, но не более необходимого числа для вхождения всего шаблона
{n,m}? Задает число вхождений от n до m включительно. Число вхождений должно быть как можно меньше, но не менее n.
*+ Задает число вхождений от 0 и больше. Число вхождений должно быть как можно больше; после первого обнаружения предпринимать повторные попытки при меньшем числе вхождений не нужно, даже общее сопоставление завершится неудачно (притяжательное сопоставление).
++ Задает число вхождений от 1 и больше. Притяжательное сопоставление.
?+ Задает ноль вхождений или одно вхождение. Притяжательное сопоставление.
{n}+ Задает ровно n вхождений
{n,}+ Задает число вхождений, равное, как минимум, n. Притяжательное сопоставление.
{n,m}+ Задает число вхождений от n до m включительно. Притяжательное сопоставление.
( ... ) Включающие скобки. Результатом поиска вхождений будет диапазон входных значений, соответствующих подвыражению, заключенному в скобки.
(?: ... ) Невключающие скобки. Задает группировку содержащегося в них шаблона, но не обеспечивает захват текста вхождений. Более эффективный способ, чем включающие скобки.
(?> ... ) Скобки поэлементного вхождения. Попытка предпринимается только для первого вхождения подвыражения в скобках; если при этом не удается получить вхождение всего шаблона, то возвращает поиск к вхождению до позиции "(?>".
(?# ... ) Комментарий в произвольном формате (?# комментарий ).
(?= ... ) Допущение прямого поиска. Вхождением считается, если шаблон в скобках совпадает в текущей позиции ввода, но не перемещает вперед позицию ввода.
(?! ... ) Отрицательное допущение прямого поиска. Вхождением считается, если шаблон в скобках не совпадает в текущей позиции ввода. Без перемещения вперед позиции ввода.
(?<= ... ) Возвратное допущение. Вхождением считается, если шаблон в скобках совпадает с текстом, который предшествует текущей позиции ввода. Последний символ вхождения - это входной символ непосредственно перед текущей позицией. Без изменения позиции ввода. Длина возможных строк, сопоставляемых с возвратным шаблоном, не должна быть несвязанной (без операторов * или +).
(?<!...) Отрицательное возвратное допущение. Вхождением считается, если шаблон в скобках не совпадает с текстом, который предшествует текущей позиции ввода. Последний символ вхождения - это входной символ непосредственно перед текущей позицией. Без изменения позиции ввода. Длина возможных строк, сопоставляемых с возвратным шаблоном, не должна быть несвязанной (без операторов * или +).
(?ismx-ismx: ... ) Параметры флагов. Выражение в скобках оценивается с использованием заданных включенных или выключенных флагов.
(?ismx-ismx) Параметры флагов. Позволяет изменить параметры флагов. Изменения применяются только к части шаблона, следующей после параметра. Например, (?i) позволяет переключиться на поиск вхождений без учета регистра символов.

Замена текста

Текст подстановки для операций поиска и замены может содержать ссылки на текст групп записи, взятый из операции поиска. Ссылки должны быть представлены в виде $n, где n - номер группы записи.
Табл. 3. Символы в тексте подстановки
Символ Описание
$n Вместо $n подставляется текст n-ной позиционной группы записи. n должно быть >= 0 и не больше чем число групп записи. Если после $ не стоит число, то такой параметр не будет выполнять никакой специальной функции, и в тексте подстановки отобразится просто сам символ $.
\ Указывает, что символ должен обрабатываться как литерал; все его специальные функции подавляются. Управляющий символ в виде обратной косой черты в тексте подстановки требуется только для символов '$' и '\', но его можно использовать и для любого другого символа без каких-либо побочных эффектов.
$@n Вместо текста n-ной группы записи подставляется регулярное выражение, соответствующее группе записи n. n должно быть >= 0 и не больше, чем число групп записи. Если после $@ не стоит число, то такой параметр не будет выполнять никакой специальной функции, и в тексте подстановки отобразится просто $@.
$#n Вместо $#n подставляется текст соответствующей группы записи. n должно быть >= 0 и не больше, чем число соответствующих групп записи. Если после $# не стоит число, то такой параметр не будет выполнять никакой специальной функции, и в тексте подстановки отобразится просто $#.

Опции флагов

Перечисленные ниже флаги управляют различными характеристиками поиска вхождений регулярных выражений. Значения флагов можно указать во время компилирования выражения в объект RegexPattern или в самом шаблоне, используя опции шаблона (?ismx-ismx).
Табл. 4. Опции флагов
Флаг (шаблон) Флаг (константа API) Описание
i UREGEX_CASE_INSENSITIVE Если задан этот флаг, поиск вхождений производится без учета регистра символов.
x UREGEX_COMMENTS Если задан этот флаг, то в шаблонах можно использовать пробелы и #комментарии.
s UREGEX_DOTALL Если задан этот флаг, то символ "." в шаблоне задает вхождение конца строки во входном тексте. По умолчанию это не так. Пара символов возврат каретки/перевод строки в тексте обрабатывается как один терминатор строки и соответствует одному символу "." в шаблоне регулярного выражения.
м UREGEX_MULTILINE Управляет порядком обработки символов "^" и "$" в шаблоне. По умолчанию эти шаблоны учитываются только в начале и конце входного текста, соответственно. Если задан этот флаг, "^" и "$" также задают вхождения в начале и в конце каждой строки входного текста.