Класс Pattern
- java.lang.Object
-
- java.util.regex.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) |
\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]
|
\D | Нецифровой символ: [^0-9]
|
\h | Горизонтальный пробельный символ: [ \t\xA0\u1680\u180e\u2000-\u200a\u202f\u205f\u3000]
|
\H | Негоризонтальный пробельный символ: [^\h]
|
\s | Пробельный символ: [ \t\n\x0B\f\r]
|
\S | Непробельный символ: [^\s]
|
\v | Вертикальный пробельный символ: [\n\x0B\f\r\x85\u2028\u2029] |
\V | Невертикальный пробельный символ: [^\v]
|
\w | Символ слова: [a-zA-Z_0-9]
|
\W | Несимвол слова: [^\w]
|
| POSIX классы символов (только US-ASCII) | |
\p{Lower} | Маленькая буквенная буква: [a-z]
|
\p{Upper} | Большая буквенная буква:[A-Z]
|
\p{ASCII} | Все ASCII:[\x00-\x7F]
|
\p{Alpha} | Буквенный символ:[\p{Lower}\p{Upper}]
|
\p{Digit} | Десятичная цифра: [0-9]
|
\p{Alnum} | Алфавитно-цифровой символ:[\p{Alpha}\p{Digit}]
|
\p{Punct} | Пунктуация: Один из !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~
|
\p{Graph} | Видимый символ: [\p{Alnum}\p{Punct}]
|
\p{Print} | Печатаемый символ: [\p{Graph}\x20]
|
\p{Blank} | Пробел или табуляция: [ \t]
|
\p{Cntrl} | Управляющий символ: [\x00-\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() |
| Классы для Unicode скриптов, блоков, категорий и бинарных свойств | |
\p{IsLatin} | Символ латинского алфавита (скрипт) |
\p{InGreek} | Символ в греческом блоке (блок) |
\p{Lu} | Заглавная буква (категория) |
\p{IsAlphabetic} | Алфавитный символ (бинарное свойство) |
\p{Sc} | Символ валюты |
\P{InGreek} | Любой символ, кроме символа в греческом блоке (отрицание) |
[\p{L}&&[^\p{Lu}]] | Любая буква, кроме заглавной буквы (вычитание) |
| Сопоставители границ | |
^ | Начало строки |
$ | Конец строки |
\b | Граница слова |
\B | Неграница слова |
\A | Начало входных данных |
\G | Конец предыдущего совпадения |
\Z | Конец входных данных, но не включая конечный терминатор, если таковой имеется |
\z | Конец входных данных |
| Сопоставитель разрывов строк | |
|---|---|
\R | Любая последовательность разрывов строк Юникода, эквивалентна \u000D\u000A|[\u000A\u000B\u000C\u000D\u0085\u2028\u2029]
|
| Жадные квантификаторы | |
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 |
(?idmsux-idmsux:X) | X, как незахватная группа с заданными флагами i d m s u x |
(?=X)
| X, посредством положительного предпросмотра нулевой ширины |
(?!X)
| X, посредством отрицательного предпросмотра нулевой ширины |
(?<=X)
| X, посредством положительного последующего просмотра нулевой ширины |
(?<!X)
| X, посредством отрицательного последующего просмотра нулевой ширины |
(?>X)
| X, как независимая незахватная группа |
Обратные слэши, экранирование и кавычки
Символ обратного слэша ('\') служит для введения экранированных конструкций, как определено в таблице выше, а также для приведения в кавычки символов, которые в противном случае были бы интерпретированы как неу экранированные конструкции. Таким образом, выражение \\ соответствует одному обратному слэшу, а \{ соответствует левой фигурной скобке.
Использование обратного слэша перед любым буквенным символом, который не обозначает экранированную конструкцию, является ошибкой; они зарезервированы для будущих расширений языка регулярных выражений. Обратный слэш может использоваться перед небуквенным символом независимо от того, является ли этот символ частью неу экранированной конструкции.
Обратные слэши внутри строковых литералов в исходном коде Java интерпретируются в соответствии с Спецификацией языка Java™ как экранирование Юникода (раздел 3.3) или другие экранированные символы (раздел 3.10.6). Поэтому для защиты от интерпретации компилятором байт-кода Java необходимо удваивать обратные слэши в строковых литералах, представляющих регулярные выражения. Например, строковый литерал "\b", интерпретируемый как регулярное выражение, соответствует одному символу обратного пробела, в то время как "\\b" соответствует границе слова. Строковый литерал "\(hello\)" является недопустимым и приводит к ошибке времени компиляции; для сопоставления строки (hello) необходимо использовать строковый литерал "\\(hello\\)".
Классы символов
Классы символов могут появляться внутри других классов символов и могут быть составлены оператором объединения (неявный) и оператором пересечения (&&). Оператор объединения обозначает класс, содержащий каждый символ, который присутствует по крайней мере в одном из его операндов. Оператор пересечения обозначает класс, содержащий каждый символ, который присутствует в обоих его операндах.
Приоритет операторов класса символов от наивысшего к наименьшему:
| 1 | Литеральный escape | \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, $ соответствует символу, предшествующему символу разделителя строк или концу последовательности входных данных.
Группы и захват
Номер группы
Группы захвата нумеруются путём подсчёта открывающих скобок слева направо. Например, в выражении ((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". Весь захваченный ввод отбрасывается в начале каждого сопоставления.
Группы, начинающиеся с (? являются либо чистыми, незахватывающими группами, которые не захватывают текст и не учитываются в общем количестве групп, либо именуемыми группами захвата.
Поддержка Юникода
Этот класс соответствует уровню 1 Технического стандарта Юникода №18: Регулярные выражения Юникода, плюс RL2.1 Канонические эквиваленты.
Последовательности обратной ссылки Юникода, такие как \u2014 в исходном коде Java, обрабатываются, как описано в разделе 3.3 Спецификации языка Java™. Такие последовательности обратной ссылки также реализуются напрямую парсером регулярных выражений, чтобы можно было использовать коды Юникода в выражениях, которые читаются из файлов или с клавиатуры. Таким образом, строки "\u2014" и "\\u2014", хотя и не равны, компилируются в один и тот же шаблон, который соответствует символу с шестнадцатеричным значением 0x2014.
Символ Юникода также может быть представлен в регулярном выражении, используя его шестнадцатеричную запись (шестнадцатеричное значение кодовой точки) непосредственно, как описано в конструкции \x{...}, например, дополнительный символ U+2011F может быть задан как \x{2011F}, вместо двух последовательных последовательностей обратной ссылки Юникода пары суррогатов \uD840\uDD1F.
Скрипты, блоки, категории и бинарные свойства Юникода записываются с помощью конструкций \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-классы символов соответствуют рекомендациям Приложения C: Свойства совместимости Стандарта регулярных выражений Юникода, когда указан флаг 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, не поддерживаемые этим классом:
-
Предопределённые классы символов (символ Юникода)
\XСопоставление Юникода расширенного кластера графем Конструкции обратных ссылок,
\g{n}для n-йгруппы захвата и\g{name}для группы захвата с именем.Конструкции символов с именем,
\N{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.
Для более точного описания поведения конструкций регулярных выражений, пожалуйста, обратитесь к Мастерство регулярных выражений, 3-е издание, Джеффри Е. Ф. Фридл, O'Reilly and Associates, 2006.
- Since:
- 1.4
- См. также:
-
String.split(String, int),String.split(String), Формат сериализации
Поля
| Модификатор и тип | Поле и описание |
|---|---|
static int |
CANON_EQ Включает каноническое соответствие. |
static int |
CASE_INSENSITIVE Включает регистронезависимое соответствие. |
static int |
COMMENTS Разрешает пробелы и комментарии в шаблоне. |
static int |
DOTALL Включает режим dotall. |
static int |
LITERAL Включает буквальный разбор шаблона. |
static int |
MULTILINE Включает многострочный режим. |
static int |
UNICODE_CASE Включает осознаваемое Юникодом преобразование регистра. |
static int |
UNICODE_CHARACTER_CLASS Включает Юникод-версию предопределённых классов символов и POSIX-классов символов. |
static int |
UNIX_LINES Включает режим Unix-строк. |
Методы
| Модификатор и тип | Метод и описание |
|---|---|
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) Компилирует данное регулярное выражение и пытается сопоставить данный вход с ним. |
String |
pattern() Возвращает регулярное выражение, из которого был скомпилирован этот шаблон. |
static String |
quote(String s) Возвращает буквальный шаблон |
String[] |
split(CharSequence input) Разделяет данную последовательность ввода вокруг соответствий с этим шаблоном. |
String[] |
split(CharSequence input,
int limit) Разделяет данную последовательность ввода вокруг соответствий с этим шаблоном. |
Stream<String> |
splitAsStream(CharSequence input) Создаёт поток из данной последовательности ввода вокруг соответствий с этим шаблоном. |
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 может быть включена, указав флаг 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
Включает Unicode-сопоставление регистров.
При указании этого флага нечувствительное к регистру сопоставление, когда включено флагом 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
Включает Unicode-версию Предопределённых наборов символов и POSIX-наборов символов.
При указании этого флага (только US-ASCII) Предопределённые наборы символов и POSIX-наборы символов соответствуют Unicode Technical Standard #18: Unicode Regular Expression Приложению 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) Компилирует заданное регулярное выражение в шаблон с заданными флагами.
- Параметры:
-
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()
Возвращает строковое представление этого шаблона. Это регулярное выражение, из которого был скомпилирован этот шаблон.
matcher
public Matcher matcher(CharSequence input)
Создаёт сопоставитель, который будет сопоставлять заданный ввод с этим шаблоном.
- Параметры:
-
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 управляет количеством применений шаблона и, следовательно, влияет на длину возвращаемого массива. Если предел n больше нуля, шаблон применяется не более n - 1 раз, длина массива не будет больше n, а последний элемент массива будет содержать все входные данные после последнего совпадения разделителя. Если n неположительно, шаблон применяется столько раз, сколько возможно, и массив может иметь любую длину. Если n равно нулю, шаблон применяется столько раз, сколько возможно, массив может иметь любую длину, и хвостовые пустые строки будут отброшены.
Вход "boo:and:foo", например, дает следующие результаты с этими параметрами:
| Регулярное выражение | Предел | Результат |
|---|---|---|
| : | 2 | { "boo", "and:foo" } |
| : | 5 | { "boo", "and", "foo" } |
| : | -2 | { "boo", "and", "foo" } |
| o | 5 | { "b", "", ":and:f", "", "" } |
| o | -2 | { "b", "", ":and:f", "", "" } |
| o | 0 | { "b", "", ":and:f" } |
- Параметры:
-
input- Последовательность символов, которая должна быть разделена -
limit- Пороговое значение результата, как описано выше - Возвращает:
- Массив строк, вычисленный путем разделения ввода по совпадениям с этим шаблоном
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 как если бы это была литерантная запись.
- Параметры:
-
s- Строка, которая должна быть записана как литерал - Возвращает:
- Литеральное строковое представление
- С:
- 1.5
asPredicate
public Predicate<String> asPredicate()
Создаёт предикат, который может быть использован для сопоставления строки.
- Возвращает:
- Предикат, который может быть использован для сопоставления строки
- С:
- 1.8
splitAsStream
public Stream<String> splitAsStream(CharSequence input)
Создаёт поток из заданной последовательности ввода по совпадениям с этим шаблоном.
Поток, возвращаемый этим методом, содержит каждую подстроку последовательности ввода, которая завершается другой подпоследовательностью, соответствующей этому шаблону, или завершается концом последовательности ввода. Подстроки в потоке находятся в том порядке, в котором они появляются во входной последовательности. Хвостовые пустые строки будут отброшены и не встретятся в потоке.
Если этот шаблон не соответствует никакой подпоследовательности ввода, то возвращаемый поток содержит только один элемент — последовательность ввода в виде строки.
Если последовательность ввода изменяема, она должна оставаться неизменной во время выполнения терминальной операции потока. В противном случае результат терминальной операции потока не определён.
- Параметры:
-
input- Последовательность символов, которая должна быть разделена - Возвращает:
- Поток строк, вычисленный путём разделения ввода по совпадениям с этим шаблоном
- С:
- 1.8
- См. также:
split(CharSequence)
© 1993, 2020, 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.