Класс Pattern
- Все реализованные интерфейсы:
Serializable
public final class Pattern extends Object implements Serializable
Регулярное выражение, заданное в виде строки, сначала необходимо скомпилировать в экземпляр этого класса. Полученный шаблон можно использовать для создания объекта Matcher, который сопоставляет произвольные последовательности символов с регулярным выражением. Всё состояние, необходимое для выполнения сопоставления, хранится в объекте matcher, поэтому один шаблон могут использовать несколько объектов 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}
| Символ с именем в Юникоде 'name' |
\t | Символ табуляции ('\u0009') |
\n | Символ новой строки (перевод строки) ('\u000A') |
\r | Символ возврата каретки ('\u000D') |
\f | Символ перевода страницы ('\u000C') |
\a | Сигнальный символ (звонок) ('\u0007') |
\e | Символ ESC ('\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 не установлен. См. раздел Поддержка Юникода. |
\D | Нецифровой символ: [^0-9]
|
\h | Символ горизонтального пробела: [ \t\xA0\u1680\u180e\u2000-\u200a\u202f\u205f\u3000]
|
\H | Символ, не являющийся горизонтальным пробелом: [^\h]
|
\s | Пробельный символ: [ \t\n\x0B\f\r], если флаг UNICODE_CHARACTER_CLASS не установлен. См. раздел Поддержка Юникода. |
\S | Непробельный символ: [^\s]
|
\v | Символ вертикального пробела: [\n\x0B\f\r\x85\u2028\u2029] |
\V | Символ, не являющийся вертикальным пробелом: [^\v]
|
\w | Символ слова: [a-zA-Z_0-9], если флаг UNICODE_CHARACTER_CLASS не установлен. См. раздел Поддержка Юникода. |
\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.Character (простой тип символа 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), в любом порядке. |
\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 как escape-последовательности Юникода (раздел 3.3) или другие символьные escape-последовательности (раздел 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))) есть четыре такие группы:
-
((A)(B(C))) -
(A) -
(B(C)) -
(C)
Номер ноль всегда обозначает всё выражение.
Захватывающие группы получили такое название потому, что во время сопоставления сохраняется каждая подстрока входной последовательности, соответствующая такой группе. Захваченную подстроку можно использовать позднее в выражении с помощью обратной ссылки, а также получить из объекта Matcher после завершения операции сопоставления.
Имя группы
Захватывающей группе также можно назначить «имя» — named-capturing group, а затем ссылаться на неё по этому «имени». Имена групп состоят из следующих символов. Первым символом должна быть letter.
- Заглавные буквы от
'A'до'Z'(от'\u0041'до'\u005a'), - Строчные буквы от
'a'до'z'(от'\u0061'до'\u007a'), - Цифры от
'0'до'9'(от'\u0030'до'\u0039'),
named-capturing group по-прежнему нумеруется, как описано в разделе Номер группы.
Захваченные входные данные, связанные с группой, всегда представляют собой подстроку, которой группа соответствовала в последний раз. Если группа вычисляется повторно из-за квантификатора, её ранее захваченное значение, если оно есть, сохраняется, когда повторное вычисление завершается неудачей. Например, при сопоставлении строки "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.
Поддерживаются имена символов Unicode с помощью конструкции именованного символа \N{...}. Например, \N{WHITE SMILING FACE} задаёт символ \u263A. Поддерживаемые этим классом имена символов — это допустимые имена символов Unicode, распознаваемые методом Character.codePointOf(name).
Поддерживаются расширенные графемные кластеры Unicode с помощью средства сопоставления графемных кластеров \X и соответствующего средства сопоставления границ \b{g}.
Скрипты, блоки, категории и бинарные свойства Unicode записываются с помощью конструкций \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} обозначают категорию букв Unicode. Как и скрипты и блоки, категории также можно указывать с помощью ключевого слова general_category (или его краткой формы gc), как в general_category=Lu или gc=Lu.
Поддерживаются категории из Стандарта Unicode версии, указанной в классе Character. Имена категорий соответствуют именам, определённым в Стандарте, как нормативным, так и информативным.
Бинарные свойства указываются с префиксом Is, как в IsAlphabetic. Поддерживаются следующие бинарные свойства Pattern:
- Alphabetic
- Ideographic
- Letter
- Lowercase
- Uppercase
- Titlecase
- Punctuation
- Control
- White_Space
- Digit
- Hex_Digit
- Join_Control
- Noncharacter_Code_Point
- Assigned
- Emoji
- Emoji_Presentation
- Emoji_Modifier
- Emoji_Modifier_Base
- Emoji_Component
- Extended_Pictographic
Следующие предопределённые классы символов и классы символов POSIX соответствуют рекомендациям из приложения C: свойства совместимости Технического стандарта Unicode № 18: регулярные выражения Unicode, если указан флаг UNICODE_CHARACTER_CLASS.
| Классы | Соответствие |
|---|---|
\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]
|
Сравнение с 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, считается обратной ссылкой, если существует не меньшее количество подвыражений, в противном случае оно интерпретируется, если возможно, как восьмеричная управляющая последовательность. В этом классе восьмеричные управляющие последовательности всегда должны начинаться с нуля. В этом классе последовательности от\1до\9всегда интерпретируются как обратные ссылки, а большее число принимается в качестве обратной ссылки, если в этой точке регулярного выражения существует не меньшее количество подвыражений; в противном случае синтаксический анализатор будет отбрасывать цифры, пока число не станет меньше или равно имеющемуся количеству групп либо не останется одна цифра.В Perl флаг
gзапрашивает сопоставление, которое возобновляется с позиции, на которой завершилось последнее сопоставление. Эта возможность неявно предоставляется классомMatcher: повторные вызовы методаfindпродолжают поиск с позиции, на которой завершилось последнее сопоставление, если только средство сопоставления не сброшено.В Perl встроенные флаги в начале выражения влияют на всё выражение. В этом классе встроенные флаги всегда начинают действовать в месте своего появления — как на верхнем уровне, так и внутри группы; в последнем случае флаги восстанавливаются в конце группы, как и в Perl.
Режим свободного форматирования в Perl (в этом классе называемый режимом комментариев), обозначаемый в регулярном выражении
(?x)(или флагомCOMMENTSпри компиляции выражения), не игнорирует пробельные символы внутри классов символов. В этом классе, чтобы пробельные символы внутри классов символов считались частью регулярного выражения в режиме комментариев, перед ними необходимо ставить символ экранирования.
Более точное описание поведения конструкций регулярных выражений см. в книге Искусство регулярных выражений, 3-е издание, Джеффри Э. Ф. Фридл, O'Reilly and Associates, 2006.
- Начиная с версии:
- 1.4
- Внешние спецификации
- См. также:
Краткое описание полей
| Модификатор и тип | Поле | Описание |
|---|---|---|
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 |
Включает версии предопределённых классов символов и классов символов POSIX с поддержкой Unicode. |
static final int |
UNIX_LINES |
Включает режим строк Unix. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
Predicate |
asMatchPredicate() |
Создаёт предикат, проверяющий, соответствует ли этот шаблон заданной входной строке. |
Predicate |
asPredicate() |
Создаёт предикат, проверяющий, найден ли этот шаблон в заданной входной строке. |
static Pattern |
compile |
Компилирует заданное регулярное выражение в шаблон. |
static Pattern |
compile |
Компилирует заданное регулярное выражение в шаблон с указанными флагами. |
int |
flags() |
Возвращает флаги сопоставления этого шаблона. |
Matcher |
matcher |
Создаёт средство сопоставления, которое будет сопоставлять заданные входные данные с этим шаблоном. |
static boolean |
matches |
Компилирует заданное регулярное выражение и пытается сопоставить с ним заданные входные данные. |
Map |
namedGroups() |
Возвращает неизменяемое отображение имён захватывающих групп в их номера. |
String |
pattern() |
Возвращает регулярное выражение, из которого был скомпилирован этот шаблон. |
static String |
quote |
Возвращает буквальный шаблон String для указанного String. |
String[] |
split |
Разбивает заданную входную последовательность вокруг совпадений с этим шаблоном. |
String[] |
split |
Разбивает заданную входную последовательность вокруг совпадений с этим шаблоном. |
Stream |
splitAsStream |
Создаёт поток из заданной входной последовательности, разделяя её вокруг совпадений с этим шаблоном. |
String[] |
splitWithDelimiters |
Разбивает заданную входную последовательность вокруг совпадений с этим шаблоном и возвращает как строки, так и разделители, соответствующие совпадениям. |
String |
toString() |
Возвращает строковое представление этого шаблона. |
Подробное описание полей
UNIX_LINES
public static final int UNIX_LINES
В этом режиме при обработке ., ^ и $ распознаётся только разделитель строк '\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
Если указан этот флаг, входная строка, задающая шаблон, рассматривается как последовательность буквальных символов. Метасимволам и escape-последовательностям во входной последовательности не придаётся специального значения.
Флаги CASE_INSENSITIVE и UNICODE_CASE сохраняют своё влияние на сопоставление при использовании вместе с этим флагом. Остальные флаги становятся избыточными.
Для включения буквального разбора не предусмотрен встроенный символ флага.
- Начиная с:
- 1.5
- См. также:
DOTALL
public static final int 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) соответствуют Техническому стандарту Юникода № 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
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— последовательность символов для сопоставления - Возвращает:
- соответствует ли регулярное выражение входным данным
- Исключения:
-
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 с заданной входной последовательностью и нулевым значением аргумента limit. Поэтому конечные пустые строки не включаются в результирующий массив.
Например, для входных данных "boo:and:foo" с указанными выражениями получаются следующие результаты:
| Регулярное выражение | Результат |
|---|---|
| : | { "boo", "and", "foo" } |
| o | { "b", "", ":and:f" } |
- Параметры:
-
input— последовательность символов для разбиения - Возвращает:
- Массив строк, полученный при разбиении входных данных вокруг совпадений с этим шаблоном
quote
public static String quote(String s)
String для указанной String. Этот метод формирует String, которое можно использовать для создания Pattern, соответствующего строке s, как если бы она была буквальным шаблоном.
- Параметры:
-
s— строка для преобразования в буквальный шаблон - Возвращает:
- Строка для буквальной подстановки
- Начиная с:
- 1.5
namedGroups
public Map<String,Integer> namedGroups()
- Возвращает:
- неизменяемое отображение имён групп захвата в номера групп
- Начиная с:
- 20
asPredicate
public Predicate<String> asPredicate()
- Примечание по API:
- Этот метод создаёт предикат, который ведёт себя так, как если бы он создавал средство сопоставления из входной последовательности, а затем вызывал
find; например, предикат следующего вида:s -> matcher(s).find(); - Возвращает:
- Предикат, который можно использовать для поиска совпадения в подпоследовательности строки
- Начиная с:
- 1.8
- См. также:
asMatchPredicate
public Predicate<String> asMatchPredicate()
- Примечание по API:
- Этот метод создаёт предикат, который ведёт себя так, как если бы он создавал средство сопоставления из входной последовательности, а затем вызывал
matches; например, предикат следующего вида:s -> matcher(s).matches(); - Возвращает:
- Предикат, который можно использовать для сопоставления входной строки с этим шаблоном.
- Начиная с:
- 11
- См. также:
splitAsStream
public Stream<String> splitAsStream(CharSequence input)
Возвращаемый этим методом поток содержит каждую подстроку входной последовательности, ограниченную другой подпоследовательностью, совпадающей с этим шаблоном, либо концом входной последовательности. Подстроки в потоке расположены в порядке их появления во входных данных. Конечные пустые строки будут отброшены и не попадут в поток.
Если этот шаблон не совпадает ни с одной подпоследовательностью входных данных, результирующий поток содержит только один элемент — входную последовательность в виде строки.
Если в начале входной последовательности имеется совпадение ненулевой длины, в начало потока включается пустая начальная подстрока. Однако совпадение нулевой длины в начале никогда не приводит к появлению такой пустой начальной подстроки.
Если входная последовательность изменяема, она должна оставаться неизменной во время выполнения терминальной операции потока. В противном случае результат терминальной операции потока не определён.
- Параметры:
-
input— последовательность символов для разбиения - Возвращает:
- Поток строк, полученный при разбиении входных данных вокруг совпадений с этим шаблоном
- Начиная с:
- 1.8
- См. также:
© 1993, 2025, 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/25/docs/api/java.base/java/util/regex/Pattern.html