Spec-Zone.ru › OpenJDK 21

Класс Pattern

java.lang.Object
java.util.regex.Pattern
Все реализованные интерфейсы:
Serializable
public final class Pattern extends Object implements Serializable
Компилированное представление регулярного выражения.

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

Типичная последовательность вызовов:

 Pattern p = Pattern.compile("a*b");
 Matcher m = p.matcher("aaaaab");
 boolean b = m.matches();

Метод matches определен в этом классе в качестве удобного средства, когда регулярное выражение используется только один раз. Этот метод компилирует выражение и сопоставляет последовательность входных данных с ним в одном вызове. Выражение

 boolean b = Pattern.matches("a*b", "aaaaab");
эквивалентно трём указанным выше операциям, но при повторных сопоставлениях менее эффективно, так как не позволяет повторно использовать скомпилированный шаблон.

Экземпляры этого класса неизменяемы и безопасны для использования в нескольких потоках одновременно. Экземпляры класса Matcher не являются безопасными для такого использования.

Краткое описание конструкций регулярных выражений

Конструкции регулярных выражений и то, что они сопоставляют
Конструкция Сопоставляемое
Символы
x Символ x
\\ Символ обратной косой черты
\0n Символ с восьмеричным значением 0n (0 <= n <= 7)
\0nn Символ с восьмеричным значением 0nn (0 <= n <= 7)
\0mnn Символ с восьмеричным значением 0mnn (0 <= m <= 3, 0 <= n <= 7)
\xhh Символ с шестнадцатеричным значением 0xhh
\uhhhh Символ с шестнадцатеричным значением 0xhhhh
\x{h...h} Символ с шестнадцатеричным значением 0xh...h (Character.MIN_CODE_POINT <= 0xh...h <= Character.MAX_CODE_POINT)
\N{name} Символ с именем Unicode 'name'
\t Символ табуляции ('\u0009')
\n Символ новой строки (перевода строки) ('\u000A')
\r Символ возврата каретки ('\u000D')
\f Символ перевода страницы ('\u000C')
\a Символ сигнала (звонка) ('\u0007')
\e Символ escape ('\u001B')
\cx Управляющий символ, соответствующий x
Классы символов
[abc] a, b, или 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] если * UNICODE_CHARACTER_CLASS не задано. См. Поддержка Unicode.
\D Не цифра: [^0-9]
\h Символ горизонтального пробела: [ \t\xA0\u1680\u180e\u2000-\u200a\u202f\u205f\u3000]
\H Не символ горизонтального пробела: [^\h]
\s Символ пробела: [ \t\n\x0B\f\r] если UNICODE_CHARACTER_CLASS не задано. См. Поддержка Unicode.
\S Не символ пробела: [^\s]
\v Символ вертикального пробела: [\n\x0B\f\r\x85\u2028\u2029]
\V Не символ вертикального пробела: [^\v]
\w Символ слова: [a-zA-Z_0-9] если UNICODE_CHARACTER_CLASS не задано. См. Поддержка Unicode.
\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-\x1F\x7F]
\p{XDigit} Шестнадцатеричная цифра: [0-9a-fA-F]
\p{Space} Символ пробела: [ \t\n\x0B\f\r]
Классы символов java.lang (простой тип символа Java)
\p{javaLowerCase} Соответствует java.lang.Character.isLowerCase()
\p{javaUpperCase} Соответствует java.lang.Character.isUpperCase()
\p{javaWhitespace} Соответствует java.lang.Character.isWhitespace()
\p{javaMirrored} Соответствует java.lang.Character.isMirrored()
Классы для юникодовых начертаний, блоков, категорий и бинарных свойств
\p{IsLatin} Символ латинского начертания (начертание)
\p{InGreek} Символ в блоке греческих символов (блок)
\p{Lu} Заглавная буква (категория)
\p{IsAlphabetic} Буквенный символ (бинарное свойство)
\p{Sc} Символ валюты
\P{InGreek} Любой символ, кроме символа в блоке греческих символов (отрицание)
[\p{L}&&[^\p{Lu}]] Любая буква, кроме заглавной (вычитание)
Сопоставители границ
^ Начало строки
$ Конец строки
\b Граница слова: (?:(?<=\w)(?=\W)|(?<=\W)(?=\w)) (место, где небуквенный символ граничит с буквенным символом)
\b{g} Граница расширенного кластера графем Юникода
\B Граница не слова: [^\b]
\A Начало входных данных
\G Конец предыдущего совпадения
\Z Конец входных данных, но не включая заключительный терминатор, если таковой имеется
\z Конец входных данных
Сопоставитель разрыва строк
\R Любая последовательность разрыва строк Юникода, эквивалентна \u000D\u000A|[\u000A\u000B\u000C\u000D\u0085\u2028\u2029]
Сопоставитель расширенных кластеров графем Юникода
\X Любой расширенный кластер графем Юникода
Жадные квантификаторы
X? X, один раз или не более
X* X, ноль или более раз
X+ X, один или более раз
X{n} X, ровно n раз
X{n,} X, по крайней мере n раз
X{n,m} X, по крайней мере n, но не более m раз
Ленивые квантификаторы
X?? X, один раз или не более
X*? X, ноль или более раз
X+? X, один или более раз
X{n}? X, ровно n раз
X{n,}? X, по крайней мере n раз
X{n,m}? X, по крайней мере n, но не более m раз
Притяжательные квантификаторы
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-й группе захвата
\k<name> То, что соответствовало группе захвата с именем "name"
Кавычки
\ Ничего, но помещает в кавычки следующий символ
\Q Ничего, но помещает в кавычки все символы до \E
\E Ничего, но завершает кавычки, начатые \Q
Специальные конструкции (с именем и без имени)
(?<name>X) X, как именованная группа захвата
(?:X) X, как группа без захвата
(?idmsuxU-idmsuxU)  Ничего, но включает флаги сопоставления i d m s u x U включение/выключение
(?idmsuxU-idmsuxU:X) X, как группа без захвата с указанными флагами i d m s u x U включение/выключение
(?=X) X, через позитивный просмотр вперед нулевой ширины
(?!X) X, через отрицательный просмотр вперед нулевой ширины
(?<=X) X, через позитивный просмотр назад нулевой ширины
(?<!X) X, через отрицательный просмотр назад нулевой ширины
(?>X) X, как независимая группа без захвата

Обратные слэши, экранирование и цитирование

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

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

Обратные слэши внутри строковых литералов в исходном коде Java интерпретируются, как требуется спецификацией языка Java, как либо экранирования Unicode (раздел 3.3), либо другие экранирования символов (раздел 3.10.6). Поэтому необходимо удваивать обратные слэши в строковых литералах, представляющих регулярные выражения, чтобы защитить их от интерпретации компилятором байт-кода Java. Например, строковый литерал "\b", интерпретируемый как регулярное выражение, соответствует одному символу обратного пробела, в то время как "\\b" соответствует границе слова. Строковый литерал "\(hello\)" является недопустимым и приводит к ошибке времени компиляции; для сопоставления строки (hello) необходимо использовать строковый литерал "\\(hello\\)".

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

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

Приоритет операторов класса символов следующий, от высшего к низшему:

Приоритет операторов класса символов.
Приоритет Название Пример
1 Экранирование литерала \x
2 Группирование [...]
3 Диапазон a-z
4 Объединение [a-e][i-u]
5 Пересечение [a-z&&[aeiou]]

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

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

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

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

Если активирован режим UNIX_LINES, то распознаются только символы новой строки как разделители строк.

Регулярное выражение . соответствует любому символу, кроме разделителя строки, если не указан флаг DOTALL.

Если режим MULTILINE не активирован, регулярное выражение ^ игнорирует разделители строк и соответствует только началу всей последовательности входных данных. Регулярное выражение $ соответствует концу всей последовательности входных данных, но также соответствует положению перед последним разделителем строки, если он не за которым не следует любой другой входной символ. Другие разделители строк игнорируются, включая последний, если он следует за другими входными символами.

Если режим MULTILINE активирован, то ^ соответствует началу входных данных и после любого разделителя строки, кроме конца входных данных. В режиме MULTILINE $ соответствует положению перед разделителем строки или концом последовательности входных данных.

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

Номер группы

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

  1. ((A)(B(C)))
  2. (A)
  3. (B(C))
  4. (C)

Группа ноль всегда соответствует всему выражению.

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

Имя группы

Группе захвата также может быть присвоено «имя», named-capturing group, а затем она может быть обратной ссылкой позже по «имени». Имена групп состоят из следующих символов. Первый символ должен быть letter.

  • Заглавные буквы 'A' по 'Z' ('\u0041' по '\u005a'),
  • Строчные буквы 'a' по 'z' ('\u0061' по '\u007a'),
  • Цифры '0' по '9' ('\u0030' по '\u0039').

Группа с именем всё ещё нумеруется как описано в Номере группы.

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

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

Поддержка Unicode

Этот класс соответствует уровню 1 Технического стандарта Unicode #18: Регулярные выражения Unicode, а также RL2.1 Канонические эквиваленты и RL2.2 Расширенные кластеры графем.

Экранированные последовательности Unicode, такие как \u2014 в исходном коде Java, обрабатываются, как описано в разделе 3.3 Спецификации языка Java. Такие последовательности экранирования также реализуются напрямую анализатором регулярных выражений, чтобы можно было использовать экранирования Unicode в выражениях, которые считываются из файлов или с клавиатуры. Таким образом, строки "\u2014" и "\\u2014", хотя и не равны, компилируются в один и тот же шаблон, который соответствует символу с шестнадцатеричным значением 0x2014.

Символ Unicode также можно представить, используя его шестнадцатеричную запись (шестнадцатеричное значение кодового пункта) непосредственно, как описано в конструкции \x{...}, например, дополнительный символ U+2011F можно указать как \x{2011F}, вместо двух последовательных экранированных последовательностей Unicode пары суррогатов \uD840\uDD1F.

Имена символов Юникода поддерживаются конструкцией именованного символа \N{...}, например, \N{WHITE SMILING FACE} указывает символ \u263A. Поддерживаемые символы в этом классе — это допустимые имена символов Юникода, соответствующие Character.codePointOf(name).

Расширенные кластеры символов Юникода поддерживаются соответствием кластеров символов \X и соответствующим соответствием границ \b{g}.

Скрипты, блоки, категории и бинарные свойства Юникода записываются с помощью конструкций \p и \P так же, как в Perl. \p{prop} соответствует, если у входных данных есть свойство prop, в то время как \P{prop} не соответствует, если у входных данных есть это свойство.

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

Скрипты задаются либо с префиксом Is, как в IsHiragana, либо с использованием ключевого слова script (или его сокращённой формы sc) как в script=Hiragana или sc=Hiragana.

Имена скриптов, поддерживаемые Pattern, — это допустимые имена скриптов, принятые и определённые UnicodeScript.forName.

Блоки задаются с префиксом In, как в InMongolian, или с использованием ключевого слова block (или его сокращённой формы blk) как в block=Mongolian или blk=Mongolian.

Имена блоков, поддерживаемые Pattern, — это допустимые имена блоков, принятые и определённые UnicodeBlock.forName.

Категории могут быть заданы с необязательным префиксом Is: Как \p{L}, так и \p{IsL} обозначают категорию символов Юникода. Как и скрипты и блоки, категории также могут быть заданы с помощью ключевого слова general_category (или его сокращённой формы gc) как в general_category=Lu или gc=Lu.

Поддерживаемые категории — это категории Стандарта Юникода в версии, указанной классом Character. Имена категорий определены в Стандарте, как нормативные, так и информационные.

Бинарные свойства задаются с префиксом Is, как в IsAlphabetic. Поддерживаемые бинарные свойства Pattern

  • Буквальный
  • Идеографический
  • Буква
  • Строчный
  • Прописной
  • Заглавный
  • Знак препинания
  • Управляющий
  • Пробельный
  • Цифра
  • Шестнадцатеричная цифра
  • Объединяющий
  • Несимвольный код
  • Назначенный
  • Эмодзи
  • Представление эмодзи
  • Модификатор эмодзи
  • Базовая часть модификатора эмодзи
  • Компонент эмодзи
  • Расширенный пиктографический

Следующие предопределённые классы символов и классы символов POSIX соответствуют рекомендациям Приложения С: Свойства совместимости Технического стандарта Юникода № 18: Регулярные выражения Юникода, когда указан флаг UNICODE_CHARACTER_CLASS.

predefined and posix character classes in Unicode mode
Классы Соответствия
\p{Lower} Маленькая буква:\p{IsLowercase}
\p{Upper} Большая буква:\p{IsUppercase}
\p{ASCII} Все ASCII:[\x00-\x7F]
\p{Alpha} Буква:\p{IsAlphabetic}
\p{Digit} Десятичная цифра:\p{IsDigit}
\p{Alnum} Алфавитно-цифровой символ:[\p{IsAlphabetic}\p{IsDigit}]
\p{Punct} Символ пунктуации:\p{IsPunctuation}
\p{Graph} Видимый символ: [^\p{IsWhite_Space}\p{gc=Cc}\p{gc=Cs}\p{gc=Cn}]
\p{Print} Печатаемый символ: [\p{Graph}\p{Blank}&&[^\p{Cntrl}]]
\p{Blank} Пробел или табуляция: [\p{IsWhite_Space}&&[^\p{gc=Zl}\p{gc=Zp}\x0a\x0b\x0c\x0d\x85]]
\p{Cntrl} Управляющий символ: \p{gc=Cc}
\p{XDigit} Шестнадцатеричная цифра: [\p{gc=Nd}\p{IsHex_Digit}]
\p{Space} Пробельный символ:\p{IsWhite_Space}
\d Цифра: \p{IsDigit}
\D Не цифра: [^\d]
\s Пробельный символ: \p{IsWhite_Space}
\S Непробельный символ: [^\s]
\w Символ слова: [\p{Alpha}\p{gc=Mn}\p{gc=Me}\p{gc=Mc}\p{Digit}\p{gc=Pc}\p{IsJoin_Control}]
\W Несимвол слова: [^\w]

Категории, которые ведут себя как методы java.lang.Character boolean ismethodname (кроме устаревших), доступны через тот же синтаксис \p{prop}, где указанное свойство имеет имя javamethodname.

Сравнение с Perl 5

Двигатель Pattern выполняет традиционное соответствие на основе NFA с упорядоченной альтернацией, как в Perl 5.

Конструкции Perl, не поддерживаемые этим классом:

  • Конструкции обратной ссылки, \g{n} для n-й группы захвата и \g{name} для именованной группы захвата.

  • Условные конструкции (?(condition)X) и (?(condition)X|Y),

  • Конструкции встроенного кода (?{code}) и (??{code}),

  • Синтаксис встроенных комментариев (?#comment), и

  • Предобработка операций \l \u, \L, и \U.

Конструкции, поддерживаемые этим классом, но не Perl:

  • Объединение и пересечение классов символов, как описано выше.

Отличительные особенности от Perl:

  • В Perl, \1 по \9 всегда интерпретируются как обратные ссылки; число с обратной косой чертой, большее 9, обрабатывается как обратная ссылка, если существует соответствующее подвыражение, в противном случае оно интерпретируется (если возможно) как восьмеричный escape. В этом классе восьмеричные escapes всегда должны начинаться с нуля. В этом классе, \1 по \9 всегда интерпретируются как обратные ссылки, и большее число принимается как обратная ссылка, если по крайней мере столько подвыражений существует в этой точке регулярного выражения, иначе анализатор опустит цифры, пока число не станет меньше или равно существующему числу групп или не станет однозначным.

  • Perl использует флаг g для запроса соответствия, которое возобновляется с места последнего соответствия. Эта функциональность неявно обеспечивается классом Matcher: Повторные вызовы метода find возобновляют соответствие с места последнего соответствия, если соответствие не сброшено.

  • В Perl, встроенные флаги на верхнем уровне выражения влияют на всё выражение. В этом классе встроенные флаги всегда действуют в тот момент, когда они появляются, независимо от того, находятся ли они на верхнем уровне или внутри группы; в последнем случае флаги восстанавливаются в конце группы, как и в Perl.

  • Режим свободного форматирования в Perl (называемый в этом классе режимом комментариев), обозначаемый (?x) в регулярном выражении (или флагом COMMENTS при компиляции выражения), не игнорирует пробелы внутри классов символов. В этом классе пробелы внутри классов символов необходимо экранировать, чтобы они учитывались как часть регулярного выражения в режиме комментариев.

Для более точного описания поведения конструкций регулярных выражений, пожалуйста, обратитесь к Mastering Regular Expressions, 3rd Edition, Jeffrey E. F. Friedl, O'Reilly and Associates, 2006.

Since:
1.4
External Specifications
  • Регулярные выражения Юникода
See Also:
  • String.split(String, int)
  • String.split(String)
  • Сериализованная форма

Краткое описание полей

Модификатор и тип Поле Описание
static final int CANON_EQ
Включает каноническое соответствие.
static final int CASE_INSENSITIVE
Включает сопоставление без учёта регистра.
static final int COMMENTS
Разрешает пробелы и комментарии в шаблоне.
static final int DOTALL
Включает режим dotall.
static final int LITERAL
Включает буквальное разбор шаблона.
static final int MULTILINE
Включает многострочный режим.
static final int UNICODE_CASE
Включает Unicode-сознательное сжатие регистра.
static final int UNICODE_CHARACTER_CLASS
Включает Unicode-версии Предопределённых классов символов и POSIX классов символов.
static final int UNIX_LINES
Включает режим Unix-строк.

Краткое описание методов

Модификатор и тип Метод Описание
Predicate<String> asMatchPredicate()
Создаёт предикат, проверяющий, соответствует ли этот шаблон заданной входной строке.
Predicate<String> asPredicate()
Создаёт предикат, проверяющий, найден ли этот шаблон в заданной входной строке.
static Pattern compile(String regex)
Компилирует заданное регулярное выражение в шаблон.
static Pattern compile(String regex, int flags)
Компилирует заданное регулярное выражение в шаблон с заданными флагами.
int flags()
Возвращает флаги сопоставления этого шаблона.
Matcher matcher(CharSequence input)
Создаёт соответствие, которое будет сопоставлять заданный ввод с этим шаблоном.
static boolean matches(String regex, CharSequence input)
Компилирует заданное регулярное выражение и пытается сопоставить заданный ввод с ним.
Map<String,Integer> namedGroups()
Возвращает неизменяемую карту из имён захватывающих групп к номерам групп.
String pattern()
Возвращает регулярное выражение, из которого был скомпилирован этот шаблон.
static String quote(String s)
Возвращает буквальный шаблон String для указанного String.
String[] split(CharSequence input)
Разделяет заданную последовательность ввода вокруг совпадений с этим шаблоном.
String[] split(CharSequence input, int limit)
Разделяет заданную последовательность ввода вокруг совпадений с этим шаблоном.
Stream<String> splitAsStream(CharSequence input)
Создаёт поток из заданной входной последовательности вокруг совпадений с этим шаблоном.
String[] splitWithDelimiters(CharSequence input, int limit)
Разделяет заданную последовательность ввода вокруг совпадений с этим шаблоном и возвращает как строки, так и соответствующие разделители.
String toString()
Возвращает строковое представление этого шаблона.

Методы, объявленные в классе java.lang.Object

clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait

Подробное описание полей

UNIX_LINES

public static final int UNIX_LINES
Включает режим строк Unix.

В этом режиме, только '\n' разделитель строк распознаётся в поведении ., ^, и $.

Режим строк Unix также может быть включён с помощью встроенного выражения флага (?d).

См. также:
  • Значения константных полей

CASE_INSENSITIVE

public static final int CASE_INSENSITIVE
Включает регистронезависимое сопоставление.

По умолчанию регистронезависимое сопоставление предполагает, что сопоставляются только символы в кодировке US-ASCII. Регистронезависимое сопоставление с учётом Юникода может быть включено, указав флаг UNICODE_CASE в сочетании с этим флагом.

Регистронезависимое сопоставление также можно включить с помощью встроенного выражения флага (?i).

Указание этого флага может немного повлиять на производительность.

См. также:
  • Значения константных полей

COMMENTS

public static final int COMMENTS
Разрешает пробелы и комментарии в шаблоне.

В этом режиме пробелы игнорируются, а встроенные комментарии, начинающиеся с # игнорируются до конца строки. Режим комментариев игнорирует пробелы внутри класса символов, содержащегося в строке шаблона. Такие пробелы должны быть экранированы, чтобы считаться значимыми.

Режим комментариев также может быть включён с помощью встроенного выражения флага (?x).

См. также:
  • Значения константных полей

MULTILINE

public static final int MULTILINE
Включает многострочный режим.

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

Многострочный режим также может быть включён с помощью встроенного выражения флага (?m).

См. также:
  • Значения константных полей

LITERAL

public static final int LITERAL
Включает буквальное разбор шаблона.

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

Флаги CASE_INSENSITIVE и UNICODE_CASE сохраняют своё влияние на сопоставление, когда используются совместно с этим флагом. Другие флаги становятся излишними.

Нет встроенного символа флага для включения буквального разбора.

С:
1.5
См. также:
  • Значения константных полей

DOTALL

public static final int DOTALL
Включает режим dotall.

В режиме dotall, выражение . соответствует любому символу, включая разделитель строк. По умолчанию это выражение не соответствует разделителям строк.

Режим dotall также может быть включён с помощью встроенного выражения флага (?s). (s — мнемоника для режима «строка-одна», как это называется в Perl.)

См. также:
  • Значения константных полей

UNICODE_CASE

public static final int UNICODE_CASE
Включает регистронезависимое сопоставление с учётом Юникода.

При указании этого флага регистронезависимое сопоставление, когда включен флаг CASE_INSENSITIVE, выполняется в соответствии со стандартом Юникод. По умолчанию регистронезависимое сопоставление предполагает, что сопоставляются только символы в кодировке US-ASCII.

Регистронезависимое сопоставление с учётом Юникода также может быть включено с помощью встроенного выражения флага (?u).

Указание этого флага может повлиять на производительность.

См. также:
  • Значения константных полей

CANON_EQ

public static final int CANON_EQ
Включает каноническое равенство.

При указании этого флага два символа будут считаться соответствующими, только если их полные канонические разложения совпадают. Например, выражение "a\u030A", будет соответствовать строке "\u00E5" при указании этого флага. По умолчанию сопоставление не учитывает каноническое равенство.

Нет встроенного символа флага для включения канонического равенства.

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

См. также:
  • Значения константных полей

UNICODE_CHARACTER_CLASS

public static final int UNICODE_CHARACTER_CLASS
Включает версию Юникода для предопределённых классов символов и POSIX классов символов.

При указании этого флага (только US-ASCII) предопределённые классы символов и POSIX классы символов соответствуют Техническому стандарту Юникода #18: Юникод регулярные выражения Приложению C: Свойства совместимости.

Режим UNICODE_CHARACTER_CLASS также может быть включён с помощью встроенного выражения флага (?U).

Флаг подразумевает UNICODE_CASE, то есть он включает регистронезависимое сопоставление с учётом Юникода.

Указание этого флага может повлиять на производительность.

С:
1.7
Внешние спецификации
  • Юникод регулярные выражения
См. также:
  • Значения константных полей

Подробное описание методов

compile

public static Pattern compile(String regex)
Компилирует заданное регулярное выражение в шаблон.
Параметры:
regex - Выражение, подлежащее компиляции
Возвращает:
заданное регулярное выражение, скомпилированное в шаблон
Исключения:
PatternSyntaxException - Если синтаксис выражения некорректен

compile

public static Pattern compile(String regex, int flags)
Компилирует заданное регулярное выражение в шаблон с заданными флагами.

Установка CANON_EQ среди флагов может создать умеренный риск исчерпания памяти.

Примечание о реализации:
Если CANON_EQ указан, и количество комбинирующих знаков для любого символа слишком велико, выбрасывается OutOfMemoryError.
Параметры:
regex - Выражение, подлежащее компиляции
flags - Флаги соответствия, битовая маска, которая может включать CASE_INSENSITIVE, MULTILINE, DOTALL, UNICODE_CASE, CANON_EQ, UNIX_LINES, LITERAL, UNICODE_CHARACTER_CLASS и COMMENTS
Возвращает:
заданное регулярное выражение, скомпилированное в шаблон с заданными флагами
Исключения:
IllegalArgumentException - Если битовые значения, отличные от соответствующих флагов соответствия, установлены в flags
PatternSyntaxException - Если синтаксис выражения некорректен

pattern

public String pattern()
Возвращает регулярное выражение, из которого был скомпилирован этот шаблон.
Возвращает:
Источник этого шаблона

toString

public String toString()

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

Переопределяет:
toString в классе Object
Возвращает:
Строковое представление этого шаблона
С:
1.5

matcher

public Matcher matcher(CharSequence input)
Создаёт матчер, который будет сопоставлять заданный ввод с этим шаблоном.
Примечание реализации:
При десериализации Pattern, компиляция откладывается до прямого или косвенного вызова этого метода. Таким образом, если у десериализованного шаблона есть CANON_EQ среди его флагов и количество комбинирующих знаков для любого символа слишком велико, будет брошено исключение OutOfMemoryError, как и в compile(String, int).
Параметры:
input - Последовательность символов, которые нужно сопоставить
Возвращает:
Новый матчер для этого шаблона

flags

public int flags()
Возвращает флаги сопоставления для этого шаблона.
Возвращает:
Флаги сопоставления, заданные при компиляции этого шаблона

matches

public static boolean matches(String regex, CharSequence input)
Компилирует заданный регулярное выражение и пытается сопоставить заданный ввод с ним.

Вызов этого удобного метода вида

 Pattern.matches(regex, input);
ведет себя точно так же, как выражение
 Pattern.compile(regex).matcher(input).matches()

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

Параметры:
regex - Выражение, которое нужно скомпилировать
input - Последовательность символов, которые нужно сопоставить
Возвращает:
true или false в зависимости от того, соответствует ли регулярное выражение вводу
Исключения:
PatternSyntaxException - Если синтаксис выражения неверный

split

public String[] split(CharSequence input, int limit)
Разделяет заданную последовательность ввода по соответствиям с этим шаблоном.

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

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

Параметр limit управляет количеством применений шаблона и, следовательно, влияет на длину возвращаемого массива.

  • Если limit положительно, то шаблон будет применяться не более limit - 1 раз, длина массива не будет больше limit, и последний элемент массива будет содержать всё, что находится за последним разделителем.

  • Если limit равно нулю, то шаблон будет применяться как можно больше раз, длина массива может быть любой, и пустые хвостовые строки будут отброшены.

  • Если limit отрицательно, то шаблон будет применяться как можно больше раз, и длина массива может быть любой.

Ввод "boo:and:foo", например, даёт следующие результаты с этими параметрами:

Пример разбиения, показывающий регулярное выражение, ограничение и результат
Регулярное выражение Ограничение Результат
: 2 { "boo", "and:foo" }
5 { "boo", "and", "foo" }
-2 { "boo", "and", "foo" }
o 5 { "b", "", ":and:f", "", "" }
-2 { "b", "", ":and:f", "", "" }
0 { "b", "", ":and:f" }
Параметры:
input - Последовательность символов для разделения
limit - Пороговое значение результата, как описано выше
Возвращает:
Массив строк, полученный путём разделения ввода по соответствиям с шаблоном

splitWithDelimiters

public String[] splitWithDelimiters(CharSequence input, int limit)
Разделяет заданную последовательность ввода по соответствиям с этим шаблоном и возвращает как строки, так и соответствующие разделители.

Массив, возвращаемый этим методом, содержит каждый подстроку последовательности ввода, которая завершается другой подпоследовательностью, соответствующей этому шаблону, или завершается концом последовательности ввода. Каждая подстрока сразу же следует за подпоследовательностью (разделителем), соответствующей этому шаблону, кроме последней подстроки, за которой ничего не следует. Подстроки в массиве и разделители находятся в порядке их появления во вводе. Если этот шаблон не соответствует никакой подпоследовательности ввода, то возвращаемый массив содержит только одну строку, а именно последовательность ввода в виде строки.

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

Параметр limit управляет количеством применений шаблона и, следовательно, влияет на длину возвращаемого массива.

  • Если limit положительно, то шаблон будет применяться не более limit - 1 раз, длина массива не будет больше 2 × limit - 1, и последний элемент массива будет содержать всё, что находится за последним разделителем.
  • Если limit равно нулю, то шаблон будет применяться как можно больше раз, длина массива может быть любой, и пустые хвостовые строки, будь то подстроки или разделители, будут отброшены.
  • Если limit отрицательно, то шаблон будет применяться как можно больше раз, и длина массива может быть любой.

Ввод "boo:::and::foo", например, даёт следующие результаты с этими параметрами:

Пример разбиения, показывающий регулярное выражение, ограничение и результат
Регулярное выражение Ограничение Результат
:+ 2 { "boo", ":::", "and::foo" }
5 { "boo", ":::", "and", "::", "foo" }
-1 { "boo", ":::", "and", "::", "foo" }
o 5 { "b", "o", "", "o", ":::and::f", "o", "", "o", "" }
-1 { "b", "o", "", "o", ":::and::f", "o", "", "o", "" }
0 { "b", "o", "", "o", ":::and::f", "o", "", "o" }
Параметры:
input - Последовательность символов для разделения
limit - Пороговое значение результата, как описано выше
Возвращает:
Массив строк, полученный путём разделения ввода по соответствиям с шаблоном, чередуя подстроки и соответствующие разделители
С момента:
21

split

public String[] split(CharSequence input)
Разделяет заданную последовательность ввода по соответствиям с этим шаблоном.

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

Ввод "boo:and:foo", например, даёт следующие результаты с этими выражениями:

Примеры разбиения, показывающие регулярное выражение и результат
Регулярное выражение Результат
: { "boo", "and", "foo" }
o { "b", "", ":and:f" }
Параметры:
input - Последовательность символов для разделения
Возвращает:
Массив строк, полученный путём разделения ввода по соответствиям с шаблоном

quote

public static String quote(String s)
Возвращает String литеральный шаблон для указанной String.

Этот метод создаёт String, который можно использовать для создания Pattern, который будет соответствовать строке s, как если бы она была литеральным шаблоном.

Метасимволы или последовательности escape во входной последовательности не будут иметь особого значения.
Параметры:
s - Строка, которая должна быть литерализована
Возвращает:
Литеральная строка-замена
С момента:
1.5

namedGroups

public Map<String,Integer> namedGroups()
Возвращает неизменяемую карту из имён захватываемых групп к номерам групп. Если именованных групп нет, возвращает пустую карту.
Возвращает:
Неизменяемую карту из имён захватываемых групп к номерам групп
С момента:
20

asPredicate

public Predicate<String> asPredicate()
Создаёт предикат, проверяющий, найдено ли это шаблон в заданной строке.
API Note:
Этот метод создаёт предикат, который ведет себя так, как будто он создаёт матчер из входной последовательности, а затем вызывает find, например, предикат следующего вида:

   s -> matcher(s).find();
 
Возвращает:
Предикат, который можно использовать для поиска совпадения в подпоследовательности строки
Since:
1.8
См. также:
  • Matcher.find()

asMatchPredicate

public Predicate<String> asMatchPredicate()
Создаёт предикат, проверяющий, соответствует ли этот шаблон заданной строке.
API Note:
Этот метод создаёт предикат, который ведет себя так, как будто он создаёт матчер из входной последовательности, а затем вызывает matches, например, предикат следующего вида:

   s -> matcher(s).matches();
 
Возвращает:
Предикат, который можно использовать для сопоставления входной строки с этим шаблоном.
Since:
11
См. также:
  • Matcher.matches()

splitAsStream

public Stream<String> splitAsStream(CharSequence input)
Создаёт поток из заданной входной последовательности вокруг совпадений с этим шаблоном.

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

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

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

Параметры:
input - Последовательность символов, которая должна быть разделена
Возвращает:
Поток строк, вычисленных путём разделения входных данных вокруг совпадений с этим шаблоном
Since:
1.8
См. также:
  • split(CharSequence)

© 1993, 2023, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/util/regex/Pattern.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API