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

Регулярное выражение подобно сложному шаблону. Другими словами, это строка, которая описывается или соответствует другим строкам согласно определенным правилам синтаксиса.

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

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

Компонент

Соответствие

Символы

x

Cимвол x

\

Символ обратная косая черта

n

Символ с восьмеричным значением (octal value) 0n (0 <= n <= 7)

nn

Символ с восьмеричным значением (octal value) 0nn (0 <= n <= 7)

mnn

Символ с восьмеричным значением (octal value) 0mnn (0 <= m <= 3, 0 <= n <= 7)

xhh

Символ с шестнадцатеричным значением (hexadecimal value) 0xhh

\uhhhh

Символ с шестнадцатеричным значением (hexadecimal value) 0xhhhh

t

Символ табуляции ('\u0009')

n

Символ новой строки ('\u000A')

r

Символ возврата каретки ('\u000D')

f

Символ перевода строки ('\u000C')

a

Символ колокольчика ('\u0007')

e

Символ escape ('\u001B')

c x

Соответствует управляющему символу ASCII, который задан как X или x, где X или x является буквой управляющего

Классы символов

[abc]

a, b, or c (простой класс)

[^abc]

Любой символ, кроме a, b, или c (отрицание)

[a-zA-Z]

с a по z и с A по Z включительно (диапазон)

[a-d[m-p]]

с a по (d или с m по p): [a-dm-p] (объединение)

[a-z&&[def]]

d, e или f (пересечение)

[a-z&&[^bc]]

с a по z, исключая b и c: [ad-z] (вычитание)

[a-z&&[^m-p]]

с a по z, и без от m до p: [a-lq-z](вычитание)

Предопределенный класс символов

.

любой символ (может соответствовать или не соответствовать завершителю строки)

d

числовой: [0-9]

D

не числовой: [^0-9]

s

пробельный символ: [ tnx0Bfr]

S

не пробельный символ: [^s]

w

словообразующий символ: [a-zA-Z_0-9]

W

не словообразующий символ: [^w]

Класс символов POSIX  (только US-ASCII)

p{Lower}

алфавитный символ нижнего регистра: [a-z]

p{Upper}

алфавитный символ верхнего регистра:[A-Z]

p{ASCII}

все ASCII:[x00-x7F]

p{Alpha}

алфавитный символ:[p{Lower}p{Upper}]

p{Digit}

десятичный знак: [0-9]

p{Alnum}

алфавитно-числовой символ:[p{Alpha}p{Digit}]

p{Punct}

пунктуационные знаки: один из !"#$%&'()*+,-./:;<=>?@[]^_`{|}~

p{Graph}

видимый знак: [p{Alnum}p{Punct}]

p{Print}

печатный знак: [p{Graph}x20]

p{Blank}

пробел или табуляция: [ t]

p{Cntrl}

управляющий знак: [x00-x1Fx7F]

p{XDigit}

десятичный знак: [0-9a-fA-F]

p{Space}

пробельный символ: [ tnx0Bfr]

Обнаружители границ

^

Начало строки

$

Конец строки

b

граница слова

B

граница не слова

A

начало ввода

G

окончание предыдущего совпадения (previous match)

Z

конец ввода для указателя конца, если есть

z

конец ввода

Жадные Квантаторы (Greedy quantifiers)

X?

X, один раз или ни одного

X*

X, нуль или много раз

X+

X, один или более раз

X{n}

X, точное количество n-раз

X{n,}

X, по меньшей мере n-раз

X{n,m}

X, как минимум n-раз, но не более m-раз

Неохотные Квантаторы (Reluctant quantifiers)

X??

X, один или ни одного

X*?

X, нуль или более раз

X+?

X, один или более раз

X{n}?

X, точное количество n-раз

X{n,}?

X, как минимум n-раз

X{n,m}?

X, как минимум n-раз, но не более m-раз

Ревнивые Квантаторы (Possessive quantifiers)

X?+

X, один или ни одного

X*+

X, нуль или более раз

X++

X, один или более раз

X{n}+

X, точное количество n-раз

X{n,}+

X,  как минимум n-раз

X{n,m}+

X,  как минимум n-раз, но не более m-раз

Логические операторы

XY

за X следует Y

X|Y

как X, так и Y

(X)

X, как группа захвата

Обратные ссылки

n

Все, что соответвует группе захвата n

Кавычки

Не соответствует ни одному символу, только цитирует следующий знак

Q

Не соответствует ни одному символу, только цитирует все знаки до E

E

Не соответствует ни одному символу, только заканчивает цитирование, которое началось с Q

Символы обратная косая черта, символ ESC и символ экранирования

Символ обратная косая черта ('') служит для введения экранированных конструкций, как определено в таблице ниже, а также для экранирования символов, которые в ином случае были бы проинтерпретированы как не экранированные конструкции. Таким образом, выражение \ соответствует одной обратной косой черте и левой фигурной скобке { .

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

Символьные классы

Символьные классы могут появлятся и в других классах символов, а также могут быть составлены оператором объединения (неявно) и оператором пересечения. (&&). Оператор объединения обозначает класс, которые содержит каждый символ, который является как минимум одним из своих классов операндов. Оператор пересечения обозначает класс, который содержит каждый символ, который относится к обоим своим классам операндов.

Приоритет операторов класса символов выглядит следующим образом (от высшего к низшему):

1

Экранирование символа

x

2

Группировка

[...]

3

Диапазон

a-z

4

Объединение

[a-e][i-u]

5

Пересечение

[a-z&&[aeiou]]

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

Разделители строк

Разделитель строк - это одно или двух символьная последовательность, которая отмечает конец строки последовательности символов ввода. Ниже представлены разделители строк:

  • Символ новой строки ('n'),
  • Символ возврата каретки, за которым сразу же следует символ новой строки ("rn"),
  • Изолированный символ возврата каретки ('r'),
  • Символ следующей строки ('\u0085'),
  • Разделитель строк ('\u2028'), или
  • Разделитель абзацев ('\u2029).

Группы и захват

Группы захвата нумеруются по открывающим их круглым скобкам слева направо. В выражении ((A)(B(C))), например, есть четыре таких группы:

1

((A)(B(C)))

2

(A)

3

(B(C))

4

(C)

Группа ноль означает целое выражение.

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

Захваченный ввод, ассоциируемый с группой, всегда является подпоследовательностью, которой в самый последний раз соответствовала группа. Если группа рассчитывается второй раз из-за квантификации, тогда ее ранее захваченное значение, если такое было, будет сохранено при невыполнении второго расчета. Соответствие строки aba выражению (a(b)?)+, например, оставляет группе настройку на b. Весь захваченный ввод сбрасывается в начале каждого соответствия.

Группы, начинающиеся с (?, чистые, незахваченные группы, которые не захватывают текст и не входят в общее число групп.

Дополнительные источники информации о регулярных выражениях