Класс 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}
| Символ с именем символа Unicode 'name' |
\t | Символ табуляции ('\u0009') |
\n | Символ новой строки (перевода строки) ('\u000A') |
\r | Символ возврата каретки ('\u000D') |
\f | Символ перевода страницы ('\u000C') |
\a | Символ оповещения (звонка) ('\u0007') |
\e | Символ выхода ('\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.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() |
| Классы для письменностей, блоков, категорий и двоичных свойств Unicode | |
\p{IsLatin} | Символ латинской письменности (письменность) |
\p{InGreek} | Символ из греческого блока (блок) |
\p{Lu} | Заглавная буква (категория) |
\p{IsAlphabetic} | Буквенный символ (двоичное свойство) |
\p{Sc} | Символ валюты |
\P{InGreek} | Любой символ, кроме символов греческого блока (отрицание) |
[\p{L}&&[^\p{Lu}]] | Любая буква, кроме заглавной (вычитание) |
| Средства сопоставления границ | |
^ | Начало строки |
$ | Конец строки |
\b | Граница слова: в начале или конце строки, если там находится символ слова (\w); или между словом (\w) и символом, не являющимся символом слова (\W), в любом порядке. |
\b{g} | Граница расширенного графемного кластера Unicode |
\B | Не граница слова: [^\b]
|
\A | Начало входных данных |
\G | Конец предыдущего совпадения |
\Z | Конец входных данных перед последним разделителем, если он есть |
\z | Конец входных данных |
| Средство сопоставления перевода строки | |
\R | Любая последовательность символов перевода строки Unicode; эквивалентно \u000D\u000A|[\u000A\u000B\u000C\u000D\u0085\u2028\u2029]
|
| Средство сопоставления расширенной графемы Unicode | |
\X | Любой расширенный графемный кластер Unicode |
| Жадные квантификаторы | |
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))) есть четыре такие группы:
-
((A)(B(C))) -
(A) -
(B(C)) -
(C)
Номер ноль всегда обозначает всё выражение.
Захватывающие группы так называются потому, что при сопоставлении сохраняется каждая подпоследовательность входной последовательности, соответствующая такой группе. Захваченную подпоследовательность можно использовать далее в выражении с помощью обратной ссылки, а также получить из объекта сопоставления после завершения операции сопоставления.
Имя группы
Захватывающей группе также можно назначить «имя» — 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. Такие управляющие последовательности также реализованы непосредственно в анализаторе регулярных выражений, поэтому escape-последовательности 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, считается обратной ссылкой, если существует как минимум столько подвыражений, иначе оно интерпретируется, если возможно, как восьмеричная escape-последовательность. В этом классе восьмеричные escape-последовательности всегда должны начинаться с нуля. В этом классе значения от\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() |
Возвращает строковое представление этого шаблона. |
Методы, объявленные в классе Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait | Модификатор и тип | Метод | Описание |
|---|---|---|
protected Object |
clone() |
Создаёт и возвращает копию этого объекта. |
boolean |
equals |
Указывает, равен ли этот объект другому объекту. |
protected void |
finalize() |
Устарело, подлежит удалению: этот элемент API будет удалён в будущей версии. Финализация устарела и будет удалена в одном из будущих выпусков. |
final Class |
getClass() |
Возвращает класс времени выполнения этого Object. |
int |
hashCode() |
Возвращает хеш-код этого объекта. |
final void |
notify() |
Пробуждает один поток, ожидающий на мониторе этого объекта. |
final void |
notifyAll() |
Пробуждает все потоки, ожидающие на мониторе этого объекта. |
final void |
wait() |
Заставляет текущий поток ожидать пробуждения, обычно в результате вызова notify или interrupt. |
final void |
wait |
Заставляет текущий поток ожидать пробуждения, обычно в результате вызова notify или interrupt, либо истечения заданного промежутка реального времени. |
final void |
wait |
Заставляет текущий поток ожидать пробуждения, обычно в результате вызова notify или interrupt, либо истечения заданного промежутка реального времени. |
Подробное описание полей
UNIX_LINES
public static final int UNIX_LINES
В этом режиме в поведении ., ^ и $ распознаётся только разделитель строк '\n'.
Режим строк Unix также можно включить с помощью встроенного выражения флага (?d).
- См. также:
CASE_INSENSITIVE
public static final int CASE_INSENSITIVE
По умолчанию при сопоставлении без учёта регистра предполагается, что сопоставляются только символы из набора символов US-ASCII. Сопоставление без учёта регистра с поддержкой Unicode можно включить, указав флаг 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, выполняется в соответствии со стандартом Unicode. По умолчанию при сопоставлении без учёта регистра предполагается, что сопоставляются только символы из набора символов US-ASCII.
Преобразование регистра с учётом Unicode также можно включить с помощью встроенного выражения флага (?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) соответствуют Техническому стандарту Unicode № 18: регулярные выражения Unicode, приложение C: свойства совместимости.
Режим UNICODE_CHARACTER_CLASS также можно включить с помощью встроенного выражения флага (?U).
Этот флаг подразумевает UNICODE_CASE, то есть включает преобразование регистра с учётом Unicode.
Указание этого флага может снизить производительность.
- Начиная с:
- 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.