25 самых используемых регулярных выражений в Java


Оглавление (нажмите, чтобы открыть):

Java RegEx

П оддержка регулярных выражений в Java реализована на очень высоком уровне посредством классов пакета java.util.regex . Язык регулярных выражений достаточно прост в изучении (в силу простоты концепций и синтаксиса), но овладеть им в совершенстве, применять в нестандартных ситуациях достаточно сложно. Поэтому изучать мир регулярных выражений лучше всего по примерам.

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

Примеры использования регулярных выражений

  • Регулярное выражение для имени пользователя
    Пример валидации имени пользователя с помощью регулярного выражения в Java и тестирование его средствами TestNG.
  • Регулярное выражение для пароля
    Пример валидации пароля с помощью регулярного выражения в Java и тестирование его средствами TestNG.
  • Регулярное выражение для шестнадцатеричного кода цвета (Hex color code)
    Пример валидации шестнадцатеричного кода цвета (Hex color code) с помощью регулярного выражения в Java и тестирование его средствами TestNG.
  • Регулярное выражение для адреса электронной почты
    Пример валидации адреса электронной почты с помощью регулярного выражения в Java и тестирование его средствами TestNG.
  • Регулярное выражение для расширения файла картинки
    Пример валидации расширения фала картинки с помощью регулярного выражения в Java и тестирование его средствами TestNG.
  • Регулярное выражение для IP адреса
    Пример валидации IP адреса с помощью регулярного выражения в Java и тестирование его средствами TestNG.
  • Регулярное выражение для времени в 12-ти часовом формате
    Пример валидации времени в 12-ти часовом формате с помощью регулярного выражения в Java и тестирование его средствами TestNG.
  • Регулярное выражение для времени в 24-х часовом формате
    Пример валидации времени в 24-х часовом формате с помощью регулярного выражения в Java и тестирование его средствами TestNG.
  • Регулярное выражение для даты
    Пример валидации даты с помощью регулярного выражения в Java и тестирование его средствами TestNG.
  • Регулярное выражение для HTML тегов
    Пример валидации HTML тегов с помощью регулярного выражения в Java и тестирование его средствами TestNG.
  • Регулярное выражение для извлечения ссылок из HTML документа
    Пример регулярного выражения для получения всех ссылок, содержащихся в HTML документе и тестирование его средствами TestNG.

Полезная информация

Валидация имени пользователя с помощью регулярного выражения

Статья содержит пример валидации имени пользователя с помощью регулярного выражения. Тестирование регулярного выражения осуществляется с помощью библиотеки TestNG. Регулярное выражение для тестирования имени пользователя: ^[a-z0-9_-]<3,15>$ Объяснение регулярного выражения: ^ # Начало строки [a-z0-9_-] # Любые символы из списка a-z, 9-0, тире и нижнее # подчеркивание <3,15># Длина от 3-х до 15-ти символов $ # Конец строки .

Валидация HTML тегов с помощью регулярного выражения в Java

Статья рассматривает пример валидации HTML тегов с помощью регулярных выражений в среде Java. В конце мы протестируем наш валидатор с помощью библиотеки TestNG. Регулярное выражение для валидации HTML тегов ])*> Пояснения по регулярному выражению:

Регулярное выражение для получения ссылок из HTML документа в Java

Данная статья показывает способ извлечение ссылок из HTML документа с помощью регулярного выражения в среде Java. Например, получить ссылку из текста примерно следующего содержания: Это текст до ссылки Это текст самой ссылки Это текст после ссылки Для этого нам потребуется выполнить два простых действия: Получить своего род «значение» тега то есть получить полное содержимое тега, заключенное между .

Валидация даты с помощью регулярного выражения в Java

В статье рассматривается один из способов валидации даты с помощью регулярного выражения в среде Java. Правильность работы регулярного выражения проверяется средствами библиотеки TestNG. Регулярное выражение для валидации даты (0?[1-9]|[12][0-9]|3[01]).(0?[1-9]|1[012]).((19|20)\d\d) Объяснение регулярного выражения: ( # Начало группы 1 0?[1-9] # 01-09 или 1-9 | # Или [12][0-9] # 10-19 или 20-29 | # Или 3[01] # .

Валидация времени в 24-х часовом формате с помощью регулярного выражения в Java

В данном материале будет рассмотрен один из вариантов валидации времени в 24-х часовом формате средствами регулярных выражений в среде Java. Модульный тест будет написан с применением библиотеки TestNG. Регулярное выражение для валидации времени в 24-х часовом формате ([01]?[0-9]|2[0-3]):[0-5][0-9] Пояснения к регулярному выражению: ( # Начало группы 1 [01]?[0-9] # Должно начинаться с 0-9, 00-09 или 10-19. | # Или 2[0-3] .

Валидация времени в 12-ти часовом формате с помощью регулярного выражения в Java

Статья содержит пример класса для валидации времени в 12-ти часовом формате с помощью регулярного выражения. Тестирование класса будет производиться средствами библиотеки TestNG. Регулярное выражение для времени в 12-ти часовом формате (1[012]|[1-9]):[0-5][0-9](\s)?(?i)(am|pm) Описание регулярного выражения: ( # Начало группы 1 1[012] # Строка должна начинаться с 10, 11 или 12. | # Или [1-9] # Строка должна начинаться с 1, 2, .

Валидация IP адреса с помощью регулярного выражения в Java

В данной статье мы рассмотрим пример простой программы, которая производит валидацию IP адреса с помощью регулярного выражения. Тестирование созданного класса мы будет производить средствами библиотеки TestNG. Регулярное выражение для валидации IP адреса ^([01]?\d\d?|2[0-4]\d|25[0-5])\.([01]?\d\d?|2[0-4]\d|25[0-5])\. ([01]?\d\d?|2[0-4]\d|25[0-5])\.([01]?\d\d?|2[0-4]\d|25[0-5])$ Объяснение регулярного выражения: ^ # Начало Строки ( # Начало группы 1 [01]?\d\d? # Может быть одна или 2 цифры. Если цифр три, .

Валидация имени файла-картинки с помощью регулярного выражения

Статья содержит пример использования регулярного выражения для валидации имени файла-картинки. Тест регулярного выражения выполняется средствами библиотеки TestNG. Регулярное выражение для валидации имени файла-картинки: ([^s]+(.(?i)(jpg|png|gif|bmp))$) Объяснение регурярного выражения: ( # Начало группы 1 [^s]+ # Имя файла должно содрежать хотя бы что-то (за исключением пробела) ( # Начало группы 2 . # Дальше идет точка . (?i) .

Валидация адреса электронной почты с помощью регулярного выражения

В статье содержится пример валидации адреса электронной почты с помощью регулярного выражения. Тестирование регулярного выражения производится с помощью библиотеки TestNG. Регулярное выражение для валидации адреса электронной почты: ^[_A-Za-z0-9-\+]+(\.[_A-Za-z0-9-]+)* @[A-Za-z0-9-]+(\.[A-Za-z0-9]+)*(\.[A-Za-z]<2,>)$; Объяснение регулярного выражения: ^ # Начало строки [_A-Za-z0-9-\+]+ # Должна начинаться со строки в скобках [ ], символ должен быть один или больше (+) ( # Начало группы .

Валидация шестнадцатеричного кода цвета с помощью регулярного выражения

Статья содержит пример валидации шестнадцатеричного кода цвета с помощью регулярного выражения. Тестирования регулярного выражения производится средствами библиотеки TestNG. Регулярное выражение для валидации шестнадцатеричного кода цвета: ^#([A-Fa-f0-9]<6>|[A-Fa-f0-9]<3>)$ Объяснение регулярного выражения ^ # начало строки # # строка должна начинаться с символа «#» ( # начало группы 1 [A-Fa-f0-9] <6># любые символы из списка в количестве 6 штук | # .

Регулярные выражения в Java

Регулярные выражения или Regex (вкратце) — это API для определения шаблонов String, которые можно использовать для поиска, манипулирования и редактирования текста. Он широко используется для определения ограничений на строки, такие как пароль. Регулярные выражения предоставляются в пакете java.util.regex.

Пакет java.util.regex в основном состоит из следующих трех классов:

Учебный класс Описание
util.regex.Pattern Используется для определения шаблонов
util.regex.Matcher Используется для выполнения операций сопоставления над текстом с использованием шаблонов
PatternSyntaxException Используется для указания синтаксической ошибки в шаблоне регулярного выражения

java.util.regex.Pattern Class

Модификатор и Тип метод Описание
статическая картина компилировать (строковое регулярное выражение) Он используется для компиляции заданного регулярного выражения в шаблон.
статическая картина компилировать (строковое регулярное выражение, флаги int) Он используется для компиляции заданного регулярного выражения в шаблон с заданными флагами.
ИНТ флаги () Он используется для возврата флагов соответствия этого шаблона.
Сличитель matcher (вход CharSequence) Он используется для создания сопоставления, которое будет сопоставлять данный ввод с этим шаблоном.
статический логический совпадения (строковое регулярное выражение, ввод CharSequence) Он используется для компиляции заданного регулярного выражения и пытается сопоставить заданный ввод с ним.
строка шаблон() Он используется для возврата регулярного выражения, из которого был скомпилирован этот шаблон.
статическая строка цитата (Строка с) Он используется для возврата буквенного шаблона String для указанной строки.
String [] split (вход CharSequence) Он используется для разделения данной входной последовательности вокруг совпадений этого шаблона.
String [] split (вход CharSequence, предел int) Он используется для разделения данной входной последовательности вокруг совпадений этого шаблона.
строка нанизывать() Он используется для возврата строкового представления этого шаблона.

ссылка на сайт
brightness_4
код

java.util.regex.Matcher Class

Модификатор и Тип метод Описание
логический находить() Он в основном используется для поиска нескольких вхождений регулярных выражений в тексте.
логический найти (int start) Используется для поиска вхождений регулярных выражений в тексте, начиная с заданного индекса.
ИНТ Начните() Он используется для получения начального индекса совпадения, найденного с помощью метода find ().
ИНТ конец() Он используется для получения конечного индекса совпадения, найденного с помощью метода find (). Возвращает индекс символа рядом с последним совпадающим символом.
ИНТ groupCount () Он используется для определения общего количества совпадающей подпоследовательности.
строка группа () Он используется для поиска согласованной подпоследовательности.
логический Матчи() Он используется для проверки соответствия регулярного выражения шаблону.

Обратите внимание, что Pattern.matches () проверяет, соответствует ли весь текст шаблону или нет. Другие методы (показанные ниже) в основном используются для поиска многократных вхождений паттерна в тексте.

Java-программы для демонстрации работы compile (), find (), start (), end () и split ():

    Java-программа для демонстрации простого поиска по шаблону

ссылка на сайт
brightness_4
код

Java-программа для демонстрации простого поиска по регулярным выражениям

ссылка на сайт
brightness_4
код

Java-программа для демонстрации поиска без учета регистра

ссылка на сайт
brightness_4
код

Java-программа для демонстрации работы split () для разделения текста на основе шаблона разделителя

ссылка на сайт
brightness_4
код

MatchResult Интерфейс

Модификатор и Тип метод Описание
ИНТ конец() Используется для возврата смещения после совпадения последнего символа.
ИНТ конец (целая группа) Он используется для возврата смещения после последнего символа подпоследовательности, захваченной данной группой во время этого совпадения.
строка группа () Он используется для возврата входной подпоследовательности, совпадающей с предыдущим соответствием.
строка группа (int group) Он используется для возврата входной подпоследовательности, захваченной данной группой во время предыдущей операции сопоставления.
ИНТ groupCount () Он используется для возврата количества групп захвата в шаблоне результата этого совпадения.
ИНТ Начните() Используется для возврата начального индекса матча.
ИНТ начало (группа int) Он используется для возврата начального индекса подпоследовательности, захваченной данной группой во время этого совпадения.

Класс PatternSyntaxException

Модификатор и Тип метод Описание
строка getDescription () Используется для получения описания ошибки.
ИНТ GetIndex () Он используется для получения индекса ошибки.
строка GetMessage () Он используется для возврата многострочной строки, содержащей описание синтаксической ошибки и ее индекса, ошибочный шаблон регулярного выражения и визуальную индикацию индекса ошибки в шаблоне.
строка GetPattern () Он используется для получения ошибочного шаблона регулярного выражения.


Важные наблюдения / факты:

  1. Мы создаем объект шаблона, вызывая Pattern.compile (), конструктора нет. compile () является статическим методом в классе Pattern.
  2. Как и выше, мы создаем объект Matcher, используя matcher () для объектов класса Pattern.
  3. Pattern.matches () также является статическим методом, который используется для проверки, соответствует ли данный текст в целом шаблону или нет.
  4. find () используется для поиска нескольких вхождений шаблона в тексте.
  5. Мы можем разделить текст на основе шаблона разделителя
    используя split ()

Статьи на основе регулярных выражений Java:

Эта статья предоставлена Akash Ojha . Если вам нравится GeeksforGeeks и вы хотите внести свой вклад, вы также можете написать статью и отправить ее по почте на contrib@geeksforgeeks.org. Смотрите свою статью, появляющуюся на главной странице GeeksforGeeks, и помогите другим вундеркиндам.

Пожалуйста, напишите комментарии, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по обсуждаемой выше теме

Использование групп регулярных выражений

Содержание

Введение

Регулярные выражения являются новой опцией Java 2 Platform, Second Edition v 1.4. Регулярное выражение представляет собой строковый шаблон, который можно использовать для выполнения изощренных операций поиска строки и замены. Например, регулярное выражение

означает «последовательность из одного или более числовых символов». Регулярное выражение представляется (компилируется в) посредством класса java.util.regex.Pattern. Затем используется соответствующий класс Matcher для поиска соответствия входной последовательности символов шаблону.

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

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

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

присутствуют две группы. Группа 0 всегда относится ко всему выражению, а группа 1 — к подвыражению, начинающемуся с открывающей круглой скобки «(» и заканчивающемуся закрывающей круглой скобкой «)». Текст соответствующих групп сохраняется обнаружителем соответствий регулярного выражения и может быть извлечен в дальнейшем в регулярном выражении.

Использование выражений для поиска чисел

Давайте проиллюстрируем эти идеи примером:

public class GroupDemo1 <
static final String stringlist [] = < "abc 123 def" , "456 ghi" , "jkl789mno" >;

public static void main ( String args []) <

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

Pattern patt = Pattern.compile ( «(\\d+)» ) ;

for ( int i = 0 ; i ) <
String currstr = stringlist [ i ] ;

// определить, содержит ли соответствие текущая строка

Matcher match = patt.matcher ( currstr ) ;

// если соответствие найдено — отобразить текст строки
// для подходящей группы (группа 1)

if ( match.find ()) <
System.out.println ( «For \»» + currstr + «\» match is: »
+ match.group ( 1 )) ;
>
>
>
>

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

и группой 1 является текст, соответствующий «\d+». После выполнения программы вы должны увидеть следующий результат:

Поиск различающихся чисел

Рассмотрим другой пример, похожий на предыдущий:

public class GroupDemo2 <
static final String stringlist [] = < "abc 123 def 123" , "456 ghi" ,
«jkl789mno 789pqr» , «123 456» > ;

public static void main ( String args []) <

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

Pattern patt = Pattern.compile ( «(\\d+).*\\1» ) ;

for ( int i = 0 ; i ) <
String currstr = stringlist [ i ] ;

// определить, содержит ли соответствие
// текущая строка

Matcher match = patt.matcher ( currstr ) ;

// если соответствие найдено — отобразить строку для
// соответствующей группы (группы 1)

if ( match.find ()) <
System.out.println ( «For \»» + currstr + «\» match is: »
+ match.group ( 1 )) ;
>
>
>
>

Программа GroupDemo2 почти аналогична программе GroupDemo1, но использует другое регулярное выражение:

Для того, чтобы входная последовательность соответствовала этому выражению, она должна содержать число с последующими любыми символами, за которыми следует оригинальное число. «\1» представляет собой обратную ссылку на первую группу в выражении. То есть, входная последовательность

будет соответствовать шаблону, а

После выполнения программы GroupDemo2 вы должны увидеть следующие результаты:

Редактирование строки

Другой способ использования групп — это редактирование строки, например, замена текста соответствующего группе другим текстом. Вот пример:

public class GroupDemo3 <
static final String stringlist [] = < "abc 123 def 123" , "456 ghi" ,
«no match» , «jkl789mno 789» , «» , «123.123» ,
«1,2,3,4,5,6,7,8,9,10» > ;

public static void main ( String args []) <

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

Pattern patt = Pattern.compile ( «(\\d+)» ) ;

for ( int i = 0 ; i ) <
String currstr = stringlist [ i ] ;

// определить, содержит ли соответствие
// текущая строка

Matcher match = patt.matcher ( currstr ) ;
boolean result = match.find () ;

// если соответствие найдено — просмотреть строку
// и заменить все соответствия строкой
// «[matchstring]»

if ( result ) <
StringBuffer strbuf = new StringBuffer () ;
do <
match.appendReplacement ( strbuf, «[$1]» ) ;
result = match.find () ;
> while ( result ) ;
match.appendTail ( strbuf ) ;
outstr = strbuf.toString () ;
>

// если соответствие не найдено — просто
// вывести входную строку

else <
outstr = currstr;
>

Программа GroupDemo3, как и предыдущие, ищет числа во входной последовательности. При обнаружении соответствия программа читает число и ставит вокруг него квадратные скобки «[]». И, наконец, программа создает выходную строку, состоящую из входной строки с выполненным над ней редактированием.

Методы appendReplacement и appendTail являются ключевыми для выполнения этой операции. Метод appendReplacement используется для замены соответствующего текста во входном потоке новой строкой, указанной вами. Строка может содержать ссылки на группы. Например, программа GroupDemo3 определяет строку замещения как «[$1]». Это означает — заменить все совпавшие фрагменты группы 1 текстом группы 1, окруженным скобками «[]», и добавить результат в выходной строковый буфер. Когда процесс поиска совпадений будет завершен, вызывается appendTail для добавления оставшейся части входной строки к выходной.

Программа GroupDemo3 отображает следующую информацию:

Логика работы этой программы аналогична логике метода Matcher.replaceAll.

Ссылки

Дополнительная информация о регулярных выражениях находится в статье «Регулярные выражения и язык программирования Java» Dane Nourie и McCloskey.

Регулярные выражения в Java


категория
Java
дата 21.08.2013
автор vovanok
голосов 87

Введение

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

Все эти задачи можно решить и классическим способом разбиения строки на массив символов и выполнения с ним каких-нибудь махинаций. Но такой подход не рекомендуется. Код будет тяжело поддерживать.

Давайте рассмотрим пример проверки имени пользователя на валидность, не вникая в суть регулярных выражений, а просто оценивая объем кода:
Результат:

WebEx

Блог Александра Богомолова

10 регулярных выражений, которые будут полезны каждому Java-программисту

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

Я предлагаю вам рассмотреть 10 наиболее распространенных и часто используемых регулярных выражений.

Регулярные выражения для новичков

Задачи и их разборы с javascript.ru; в статье использованы комиксы xkcd.

Что такое регулярные выражения?

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

Регулярные выражения представляют собой похожий, но гораздо более сильный инструмент для поиска строк, проверки их на соответствие какому-либо шаблону и другой подобной работы. Англоязычное название этого инструмента — Regular Expressions или просто RegExp. Строго говоря, регулярные выражения — специальный язык для описания шаблонов строк.

Реализация этого инструмента различается в разных языках программирования, хоть и не сильно. В данной статье мы будем ориентироваться в первую очередь на реализацию Perl Compatible Regular Expressions.

Основы синтаксиса

В первую очередь стоит заметить, что любая строка сама по себе является регулярным выражением. Так, выражению Хаха , очевидно, будет соответствовать строка “Хаха” и только она. Регулярные выражения являются регистрозависимыми, поэтому строка “хаха” (с маленькой буквы) уже не будет соответствовать выражению выше.

4 октября 2020 – 1 марта 2020, Москва и онлайн, беcплатно

Однако уже здесь следует быть аккуратным — как и любой язык, регулярные выражения имеют спецсимволы, которые нужно экранировать. Вот их список: . ^ $ * + ? < >[ ] \ | ( ) . Экранирование осуществляется обычным способом — добавлением \ перед спецсимволом.

Набор символов

Предположим, мы хотим найти в тексте все междометия, обозначающие смех. Просто Хаха нам не подойдёт — ведь под него не попадут “Хехе”, “Хохо” и “Хихи”. Да и проблему с регистром первой буквы нужно как-то решить.

Здесь нам на помощь придут наборы — вместо указания конкретного символа, мы можем записать целый список, и если в исследуемой строке на указанном месте будет стоять любой из перечисленных символов, строка будет считаться подходящей. Наборы записываются в квадратных скобках — паттерну [abcd] будет соответствовать любой из символов “a”, “b”, “c” или “d”.

Внутри набора большая часть спецсимволов не нуждается в экранировании, однако использование \ перед ними не будет считаться ошибкой. По прежнему необходимо экранировать символы “\” и “^”, и, желательно, “]” (так, [][] обозначает любой из символов “]” или «[», тогда как [[]х] – исключительно последовательность “[х]”). Необычное на первый взгляд поведение регулярок с символом “]” на самом деле определяется известными правилами, но гораздо легче просто экранировать этот символ, чем их запоминать. Кроме этого, экранировать нужно символ «-», он используется для задания диапазонов (см. ниже).

Если сразу после [ записать символ ^ , то набор приобретёт обратный смысл — подходящим будет считаться любой символ кроме указанных. Так, паттерну [^xyz] соответствует любой символ, кроме, собственно, “x”, “y” или “z”.

Итак, применяя данный инструмент к нашему случаю, если мы напишем [Хх][аоие]х[аоие] , то каждая из строк “Хаха”, “хехе”, “хихи” и даже “Хохо” будут соответствовать шаблону.

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

Для некоторых наборов, которые используются достаточно часто, существуют специальные шаблоны. Так, для описания любого пробельного символа (пробел, табуляция, перенос строки) используется \s , для цифр — \d , для символов латиницы, цифр и подчёркивания “_” — \w .

Если необходимо описать вообще любой символ, для этого используется точка — . . Если указанные классы написать с заглавной буквы ( \S , \D , \W ) то они поменяют свой смысл на противоположный — любой непробельный символ, любой символ, который не является цифрой, и любой символ кроме латиницы, цифр или подчёркивания соответственно.

Также с помощью регулярных выражений есть возможность проверить положение строки относительно остального текста. Выражение \b обозначает границу слова, \B — не границу слова, ^ — начало текста, а $ — конец. Так, по паттерну \bJava\b в строке “Java and JavaScript” найдутся первые 4 символа, а по паттерну \bJava\B — символы c 10-го по 13-й (в составе слова “JavaScript”).

Комикс про регулярные выражения с xkcd.ru

Диапазоны

У вас может возникнуть необходимость обозначить набор, в который входят буквы, например, от “б” до “ф”. Вместо того, чтобы писать [бвгдежзиклмнопрстуф] можно воспользоваться механизмом диапазонов и написать [б-ф] . Так, паттерну x[0-8A-F][0-8A-F] соответствует строка “xA6”, но не соответствует “xb9” (во-первых, из-за того, что в диапазоне указаны только заглавные буквы, во-вторых, из-за того, что 9 не входит в промежуток 0-8).

Механизм диапазонов особенно актуален для русского языка, ведь для него нет конструкции, аналогичной \w . Чтобы обозначить все буквы русского алфавита, можно использовать паттерн [а-яА-ЯёЁ] . Обратите внимание, что буква “ё” не включается в общий диапазон букв, и её нужно указывать отдельно.

Квантификаторы (указание количества повторений)

Вернёмся к нашему примеру. Что, если в “смеющемся” междометии будет больше одной гласной между буквами “х”, например “Хаахаааа”? Наша старая регулярка уже не сможет нам помочь. Здесь нам придётся воспользоваться квантификаторами.

Квантификатор Число повторений Пример Подходящие строки
Ровно n раз Ха<3>ха Хаааха
От m до n включительно Ха<2,4>ха Хаа, Хааа, Хааааха
Не менее m Ха<2,>ха Хааха, Хаааха, Хааааха и т. д.
Не более n Ха<,3>ха Хха, Хаха, Хааха, Хаааха

Обратите внимание, что квантификатор применяется только к символу, который стоит перед ним.

Некоторые часто используемые конструкции получили в языке регулярных выражений специальные обозначения:

Квантификатор Аналог Значение
? Ноль или одно вхождение
* Ноль или более
+ Одно или более

Таким образом, с помощью квантификаторов мы можем улучшить наш шаблон для междометий до [Хх][аоеи]+х[аоеи]* , и он сможет распознавать строки “Хааха”, “хееееех” и “Хихии”.

Ленивая квантификация

Предположим, перед нами стоит задача — найти все HTML-теги в строке

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

Это происходит из-за того, что по умолчанию квантификатор работают по т.н. жадному алгоритму — старается вернуть как можно более длинную строку, соответствующую условию. Решить проблему можно двумя способами. Первый — использовать выражение ]*> , которое запретит считать содержимым тега правую угловую скобку. Второй — объявить квантификатор не жадным, а ленивым. Делается это с помощью добавления справа к квантификатору символа ? . Т.е. для поиска всех тегов выражение обратится в .

Ревнивая квантификация

Иногда для увеличения скорости поиска (особенно в тех случаях, когда строка не соответствует регулярному выражению) можно использовать запрет алгоритму возвращаться к предыдущим шагам поиска для того, чтобы найти возможные соответствия для оставшейся части регулярного выражения. Это называется ревнивой квантификацией. Квантификатор делается ревнивым с помощью добавления к нему справа символа + . Ещё одно применение ревнивой квантификации — исключение нежелательных совпадений. Так, паттерну ab*+a в строке “ababa” будут соответствовать только первые три символа, но не символы с третьего по пятый, т.к. символ “a”, который стоит на третьей позиции, уже был использован для первого результата.

Скобочные группы

Для нашего шаблона “смеющегося” междометия осталась самая малость — учесть, что буква “х” может встречаться более одного раза, например, “Хахахахааахахооо”, а может и вовсе заканчиваться на букве “х”. Вероятно, здесь нужно применить квантификатор для группы [аиое]+х , но если мы просто напишем [аиое]х+ , то квантификатор + будет относиться только к символу “х”, а не ко всему выражению. Чтобы это исправить, выражение нужно взять в круглые скобки: ([аиое]х)+ .

Таким образом, наше выражение превращается в [Хх]([аиое]х?)+ — сначала идёт заглавная или строчная “х”, а потом произвольное ненулевое количество гласных, которые (возможно, но не обязательно) перемежаются одиночными строчными “х”. Однако это выражение решает проблему лишь частично — под это выражение попадут и такие строки, как, например, “хихахех” — кто-то может быть так и смеётся, но допущение весьма сомнительное. Очевидно, мы можем использовать набор из всех гласных лишь единожды, а потом должны как-то опираться на результат первого поиска. Но как?…

Запоминание результата поиска по группе (обратная связь)

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

Результат поиска по всем регулярному выражению: “

”.
Результат поиска по первой группе: “p”, “b”, “/b”, “i”, “/i”, “/i”, “/p”.

На результат поиска по группе можно ссылаться с помощью выражения \n , где n — цифра от 1 до 9. Например выражению (\w)(\w)\1\2 соответствуют строки “aaaa”, “abab”, но не соответствует “aabb”.

Если выражение берётся в скобки только для применения к ней квантификатора (не планируется запоминать результат поиска по этой группе), то сразу после первой скобки стоит добавить ?: , например (?:[abcd]+\w) .

С использованием этого механизма мы можем переписать наше выражение к виду [Хх]([аоие])х?(?:\1х?)* .

Перечисление

Чтобы проверить, удовлетворяет ли строка хотя бы одному из шаблонов, можно воспользоваться аналогом булевого оператора OR, который записывается с помощью символа | . Так, под шаблон Анна|Одиночество попадают строки “Анна” и “Одиночество” соответственно. Особенно удобно использовать перечисления внутри скобочных групп. Так, например (?:a|b|c|d) полностью эквивалентно [abcd] (в данном случае второй вариант предпочтительнее в силу производительности и читаемости).

С помощью этого оператора мы сможем добавить к нашему регулярному выражению для поиска междометий возможность распознавать смех вида “Ахахаах” — единственной усмешке, которая начинается с гласной: [Хх]([аоие])х?(?:\1х?)*|[Аа]х?(?:ах?)+

Полезные сервисы

Потренироваться и / или проверить своё регулярное выражение на каком-либо тексте без написания кода можно с помощью таких сервисов, как RegExr, Regexpal или Regex101. Последний, вдобавок, приводит краткие пояснения к тому, как регулярка работает.

Разобраться, как работает регулярное выражение, которое попало к вам в руки, можно с помощью сервиса Regexper — он умеет строить понятные диаграмы по регулярному выражению.

RegExp Builder — визуальный конструктор функций JavaScript для работы с регулярными выражениями.


Больше инструментов можно найти в нашей подборке.

Задания для закрепления

Найдите время

Время имеет формат часы:минуты. И часы, и минуты состоят из двух цифр, пример: 09:00. Напишите регулярное выражение для поиска времени в строке: “Завтрак в 09:00”. Учтите, что “37:98” – некорректное время.

Регулярные выражения Java

View more Tutorials:

1- Регулярные выражения (Regular expression)

Регулярное выражение (regular expression) определяет шаблон (pattern) поиска для строк. Регулярные выражения могут использоваться для поиска, редактирования и манипулирования текстом. Шаблон, определенный регулярным выражением, может совпадать один или несколько раз, или не совпадает с данным текстом.

Аббревиатурой для регулярного выражения является регулярное выражение.

Возможно вам будет интересно:

2- Принцип написания регулярного выражения

No Регулярные выражения Описание
1 . Подходит (match) любому символу
2 ^regex Регулярное выражение должно совпасть с начального пункта
3 regex$ Регулярное выражение должно совпасть в конце строки.
4 [abc] Создание определения, может подойти к a или b или c.
5 [abc][vz] Создание определения, может подойти к a или b или c, затем следует v или z.
6 [^abc] Когда появляется знак ^ как первый символ в квадратных скобках, он опровергает модель. Это может совпасть с любым символом, кромер a или b или c.
7 [a-d1-7] Рамки: подходит к строке между a и пунктом d и числом от 1 до 7.
8 X|Z Поиск X или Z.
9 XZ Поиск X а затем Z.
10 $ Проверка завершения строки.
11 \d Любое число, краткая форма [0-9]
12 \D Символ неявляющийся числом, краткая форма ​​​​​​​ [^0-9]
13 \s Символ пробела, краткая форма​​​​​​​ [ \t\n\x0b\r\f]
14 \S Символ неявляющийся пробелом, краткая форма​​​​​​​​​​​​​ [^\s]
15 \w Символ букв, краткая форма​​​​​​​​​​​​​ [a-zA-Z_0-9]
16 \W Символ неявляющийся пробелом, краткая форма​​​​​​​​​​​​​ [^\w]
17 \S+ Некоторые символы неявляющиеся пробелом (Один или более)
18 \b Символ яляется a-z или A-Z или 0-9 или _, краткая форма​​​​​​​​​​​​​​​​​​​​ [a-zA-Z0-9_] .
19 * Появляется 0 или много раз, краткая форма​​​​​​​​​​​​​​​​​​​​
20 + Появляется 1 или много раз, краткая форма​​​​​​​​​​​​​​​​​​​​​​​​​​​
21 ? Появляется 0 или 1 раз, ? краткая форма​​​​​​​​​​​​​​​​​​​​​​​​​​​​​ <0,1>.
22 Появляется X раз, <>
23 Появляется от X до Y раз.
24 *? * значит появляется 0 или много раз, добавление ? в конце значит поиск самого маленького совпадения.

3- Специальные символы в Java Regex (Special characters)

Символы, перечисленные выше, являются специальными символами. В Java Regex если вы хотите, чтобы он понял этот символ обычным способом, вы должны добавить \ впереди.

Например сивол точки. Java regex понимает как любой символ, если вы хотите, чтобы он понимал как символ обычной точки, требуется знак \ впереди.

4- Использование String.matches(String)

  • Class String

5- Использование Pattern и Matcher

1. Pattern это модельный объект, скомпилированная версия регулярного выражения. Он не имеет никакого публичного конструктора (constructor), и мы используем статический метод compile(String) для создания объекта, с аргументом регулярного выражения.

2. Matcher это способ сравнения совпадения вводной строки данных с созданным выше объектом Pattern. Этот класс не имеет публичный конструктор, и мы можем взять эот объект через метод matcher(String) обхекта Pattern. С вводным аргументом String являющимся документом для проверки.
​​​​​​​
3. Выражение PatternSyntaxException выбрасывается, если синтаксис регулярных выражений неверен.

Регулярные выражения java

В продолжение статьи Строки в Java: String, StringBuilder, StringBuffer поговорим сегодня о регулярных выражениях:

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

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

Регулярные выражения в Java

В Java есть пакет java.util.regex, который позволяет работать с регулярными выражениями. В нем есть интерфейс MatchResult — результат операции сравнения, классы Matcher — механизм, который выполняет операции сопоставления последовательности символов путем интерпретации шаблона и Pattern — скомпилированное представление регулярного выражения.

У класса Pattern есть метод compile(), который возвращает Pattern, соответствующий регулярному выражению. Метод matches — сравнивает выражение с набором символов и возвращает true, false в зависимости от того совпали строки или нет.

Например проверка пароля, которую мы делали через метод equals может быть реализована более элегантно с помощью метода matches.

А как насчет проверить состоит ли строка только с цифр? С помощью вышеупомянутого метода сделать это легко.

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

Метод matches также есть и у класса String. Программа выше будет работать корректно если заменить строку Pattern.matches(«[0-9]+», string) на string.matches(«[0-9]+»). Попробуйте поэкспериментировать.

[0-9]+ и есть регулярное выражение. Оно означает, что принимаются только символы от 0 до 9, а знак + означает, что их может быть один или несколько.

Правила написания регулярных выражений

Примеры выше показали как мощны и удобны regex-пы. Для того, чтобы писать любые условия соответствия строки нужно знать правила их написания.

Их не много и они очень просты и интуитивно понятны.

  1. . — точка это соответствие любому символу
  2. ^строка — находит регулярное выражение, которое должно совпадать в начале строки
  3. строка$ — выражение, которое должно совпадать в конце строки
  4. [абв] — только буквы а или б или в
  5. [абв][яю] — только буквы а или б или в за которыми следуют я или ю
  6. [^abc] — когда символ каретки появляется в качестве первого символа в квадратных скобках, он отрицает шаблон. Этот шаблон соответствует любому символу, кроме a или b или c.

Следующие метасимволы имеют предопределенное значение и упрощают использование некоторых общих шаблонов.

  1. \d — любая цифра — равнозначно [0-9]
  2. \D — только не цифра — равнозначно [^0-9]
  3. \s — символ пробела
  4. \w — символ слова — равнозначно [a-zA-Z_0-9]

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

  1. * — символ звездочки означает от ноля до бесконечности
  2. + — символ может встречаться от одного или несколько раз, сокращенно
  3. ? — встречается ни разу или один раз, знак вопроса это сокращение для
  4. — символ встречается X раз
  5. — символ встречается от X до Y раз.

Java RegEx

П оддержка регулярных выражений в Java реализована на очень высоком уровне посредством классов пакета java.util.regex . Язык регулярных выражений достаточно прост в изучении (в силу простоты концепций и синтаксиса), но овладеть им в совершенстве, применять в нестандартных ситуациях достаточно сложно. Поэтому изучать мир регулярных выражений лучше всего по примерам.

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

Примеры использования регулярных выражений

  • Регулярное выражение для имени пользователя
    Пример валидации имени пользователя с помощью регулярного выражения в Java и тестирование его средствами TestNG.
  • Регулярное выражение для пароля
    Пример валидации пароля с помощью регулярного выражения в Java и тестирование его средствами TestNG.
  • Регулярное выражение для шестнадцатеричного кода цвета (Hex color code)
    Пример валидации шестнадцатеричного кода цвета (Hex color code) с помощью регулярного выражения в Java и тестирование его средствами TestNG.
  • Регулярное выражение для адреса электронной почты
    Пример валидации адреса электронной почты с помощью регулярного выражения в Java и тестирование его средствами TestNG.
  • Регулярное выражение для расширения файла картинки
    Пример валидации расширения фала картинки с помощью регулярного выражения в Java и тестирование его средствами TestNG.
  • Регулярное выражение для IP адреса
    Пример валидации IP адреса с помощью регулярного выражения в Java и тестирование его средствами TestNG.
  • Регулярное выражение для времени в 12-ти часовом формате
    Пример валидации времени в 12-ти часовом формате с помощью регулярного выражения в Java и тестирование его средствами TestNG.
  • Регулярное выражение для времени в 24-х часовом формате
    Пример валидации времени в 24-х часовом формате с помощью регулярного выражения в Java и тестирование его средствами TestNG.
  • Регулярное выражение для даты
    Пример валидации даты с помощью регулярного выражения в Java и тестирование его средствами TestNG.
  • Регулярное выражение для HTML тегов
    Пример валидации HTML тегов с помощью регулярного выражения в Java и тестирование его средствами TestNG.
  • Регулярное выражение для извлечения ссылок из HTML документа
    Пример регулярного выражения для получения всех ссылок, содержащихся в HTML документе и тестирование его средствами TestNG.


Полезная информация

Валидация имени пользователя с помощью регулярного выражения

Статья содержит пример валидации имени пользователя с помощью регулярного выражения. Тестирование регулярного выражения осуществляется с помощью библиотеки TestNG. Регулярное выражение для тестирования имени пользователя: ^[a-z0-9_-]<3,15>$ Объяснение регулярного выражения: ^ # Начало строки [a-z0-9_-] # Любые символы из списка a-z, 9-0, тире и нижнее # подчеркивание <3,15># Длина от 3-х до 15-ти символов $ # Конец строки .

Валидация HTML тегов с помощью регулярного выражения в Java

Статья рассматривает пример валидации HTML тегов с помощью регулярных выражений в среде Java. В конце мы протестируем наш валидатор с помощью библиотеки TestNG. Регулярное выражение для валидации HTML тегов ])*> Пояснения по регулярному выражению:

Регулярное выражение для получения ссылок из HTML документа в Java

Данная статья показывает способ извлечение ссылок из HTML документа с помощью регулярного выражения в среде Java. Например, получить ссылку из текста примерно следующего содержания: Это текст до ссылки Это текст самой ссылки Это текст после ссылки Для этого нам потребуется выполнить два простых действия: Получить своего род «значение» тега то есть получить полное содержимое тега, заключенное между .

Валидация даты с помощью регулярного выражения в Java

В статье рассматривается один из способов валидации даты с помощью регулярного выражения в среде Java. Правильность работы регулярного выражения проверяется средствами библиотеки TestNG. Регулярное выражение для валидации даты (0?[1-9]|[12][0-9]|3[01]).(0?[1-9]|1[012]).((19|20)\d\d) Объяснение регулярного выражения: ( # Начало группы 1 0?[1-9] # 01-09 или 1-9 | # Или [12][0-9] # 10-19 или 20-29 | # Или 3[01] # .

Валидация времени в 24-х часовом формате с помощью регулярного выражения в Java

В данном материале будет рассмотрен один из вариантов валидации времени в 24-х часовом формате средствами регулярных выражений в среде Java. Модульный тест будет написан с применением библиотеки TestNG. Регулярное выражение для валидации времени в 24-х часовом формате ([01]?[0-9]|2[0-3]):[0-5][0-9] Пояснения к регулярному выражению: ( # Начало группы 1 [01]?[0-9] # Должно начинаться с 0-9, 00-09 или 10-19. | # Или 2[0-3] .

Валидация времени в 12-ти часовом формате с помощью регулярного выражения в Java

Статья содержит пример класса для валидации времени в 12-ти часовом формате с помощью регулярного выражения. Тестирование класса будет производиться средствами библиотеки TestNG. Регулярное выражение для времени в 12-ти часовом формате (1[012]|[1-9]):[0-5][0-9](\s)?(?i)(am|pm) Описание регулярного выражения: ( # Начало группы 1 1[012] # Строка должна начинаться с 10, 11 или 12. | # Или [1-9] # Строка должна начинаться с 1, 2, .

Валидация IP адреса с помощью регулярного выражения в Java

В данной статье мы рассмотрим пример простой программы, которая производит валидацию IP адреса с помощью регулярного выражения. Тестирование созданного класса мы будет производить средствами библиотеки TestNG. Регулярное выражение для валидации IP адреса ^([01]?\d\d?|2[0-4]\d|25[0-5])\.([01]?\d\d?|2[0-4]\d|25[0-5])\. ([01]?\d\d?|2[0-4]\d|25[0-5])\.([01]?\d\d?|2[0-4]\d|25[0-5])$ Объяснение регулярного выражения: ^ # Начало Строки ( # Начало группы 1 [01]?\d\d? # Может быть одна или 2 цифры. Если цифр три, .

Валидация имени файла-картинки с помощью регулярного выражения

Статья содержит пример использования регулярного выражения для валидации имени файла-картинки. Тест регулярного выражения выполняется средствами библиотеки TestNG. Регулярное выражение для валидации имени файла-картинки: ([^s]+(.(?i)(jpg|png|gif|bmp))$) Объяснение регурярного выражения: ( # Начало группы 1 [^s]+ # Имя файла должно содрежать хотя бы что-то (за исключением пробела) ( # Начало группы 2 . # Дальше идет точка . (?i) .

Валидация адреса электронной почты с помощью регулярного выражения

В статье содержится пример валидации адреса электронной почты с помощью регулярного выражения. Тестирование регулярного выражения производится с помощью библиотеки TestNG. Регулярное выражение для валидации адреса электронной почты: ^[_A-Za-z0-9-\+]+(\.[_A-Za-z0-9-]+)* @[A-Za-z0-9-]+(\.[A-Za-z0-9]+)*(\.[A-Za-z]<2,>)$; Объяснение регулярного выражения: ^ # Начало строки [_A-Za-z0-9-\+]+ # Должна начинаться со строки в скобках [ ], символ должен быть один или больше (+) ( # Начало группы .

Валидация шестнадцатеричного кода цвета с помощью регулярного выражения

Статья содержит пример валидации шестнадцатеричного кода цвета с помощью регулярного выражения. Тестирования регулярного выражения производится средствами библиотеки TestNG. Регулярное выражение для валидации шестнадцатеричного кода цвета: ^#([A-Fa-f0-9]<6>|[A-Fa-f0-9]<3>)$ Объяснение регулярного выражения ^ # начало строки # # строка должна начинаться с символа «#» ( # начало группы 1 [A-Fa-f0-9] <6># любые символы из списка в количестве 6 штук | # .

Java регулярные выражения

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

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

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

Java регулярных выражений и Perl является наиболее близким.

java.util.regex пакет включает в себя следующие три категории:

    Шаблон категории:

шаблон объекта является регулярное представление выражения компилятор. Класс Pattern не имеет открытый конструктор. Для создания объекта Pattern, сначала вы должны вызвать свой публичный статический метод компиляции, который возвращает объект Pattern. Этот метод принимает регулярное выражение в качестве первого аргумента.

Сличитель категории:

Сличитель объект является интерпретация входной строки и согласования работы двигателя. Как и класс Pattern, Сличитель не имеет открытый конструктор. Вам нужно вызвать метод Pattern Matcher объект для получения объекта Matcher.

PatternSyntaxException:

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

группа захвата

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

Например, регулярное выражение (собака) создает одну группу, группу, которая содержит «D», «о» и «г».

Захват группы путем расчета ее открывающую скобку пронумерованных слева направо. Например, в выражении ((А) (В (С))), существует четыре такие группы:

Называя сличитель объект groupCount способ увидеть, сколько выражение пакетов. Метод groupCount возвращает Int, представляющую объект Сличитель в настоящее время имеет несколько групп захвата.

Существует специальная группа (группа 0), она всегда представляет собой полное выражение. Группа не включается в возвращаемое значение groupCount.

примеров

В следующем примере показано, как найти строку чисел из заданной строки:

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

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

Следующий символ отмечен как специальный символ, текст, обратные ссылки или восьмеричной побега. Например, «п» соответствует символу «N». «\ N» соответствует символу новой строки. Последовательность «\\» соответствует «\», «\ (» Match «(«.

Матч начинается входной строки. Если установить свойствоRegExp позиции соответствия объекта Multiline, а также ^ «\ п» или «\ г» после.

Матч входной конец позиции строки. Если собственностьмногострочного объекта типа RegExp,$ также совпадает с «\ п» или положение «\ г» перед.

Ноль или более раз соответствует предыдущий символ или подвыражения. Например, зо * совпадает с «Z» и «зоопарк». * Эквивалент <0,>.

Один или несколько раз соответствует предыдущий символ или подвыражения. Например, «зо +» и «зо» и «зоопарк» матч, но «г» не совпадают. + Эквивалентно <1>.

Ноль или один из них соответствует предыдущий символ или подвыражения. Например, «делать (а)?» Соответствует «делать» или «делает» в «делать». ? Эквивалент <0,1>.

пнеотрицательное целое число. Соответствует ровнопраз. Например, «о <2>» и «Боб» в «о» не соответствует, но «пища» из двух «о» матче.

пнеотрицательное целое число. Матч по крайней мерепраз. Например, «о <2>» не соответствует «Боб» в «о», а также матч «foooood» все о. «О <1>» эквивалентно «о +». «О <0>» эквивалентно «о *».

Ми неотрицательное целое числоп,где п п,п здесь является шестнадцатеричным управляющие коды. Гексадесимал код выхода должен быть точно длиной две цифры. Например, «\ x41» соответствие «А». «\ X041» и «\ x04» и «1» эквивалентны. Позволяет использовать обычный код ASCII выражения.

Match Num,Num здесь является положительным целым числом. Для захвата соответствия обратных ссылок. Например, «(.) \ 1» соответствует два последовательных одинаковых символов.

Определяет восьмеричное код побега или обратные ссылки. Если \Ппредшествует по крайней мерепзахваченных подвыражениям, топявляется обратной ссылки. В противном случае, еслипявляется восьмеричное число (0-7), топявляется восьмеричное управляющие коды.

Определяет восьмеричное код побега или обратные ссылки. Если \нмперед , по меньшей меренмподвыражению захвата, а затемнмявляется обратной ссылки. Если \нм, по меньшей мере , в переднейчасти пзахвата,пявляется обратная ссылка, следует символм.Если два предыдущих случая нет,\нм соответствует восьмеричноенм,гдепитявляются восьмеричные цифры (0-7).

Припявляется восьмеричное число(0-3),м илявляются восьмеричное (0-7), он соответствует восьмеричные управляющие кодыNML.

Матчи,где ппредставляет собой символ Unicode представлен четырьмя шестнадцатеричными числами. Например, \ u00a9 соответствует символ авторского права (©).

Методы Сличитель класса

Индексный метод

Методы индекс обеспечивают полезные значения индекса указывают точно, где найти входной строки совпадений:

Нет . Метод и Описание
1 общественное начало INT ()
Возвращает начальный индекс предыдущего матча.
2 публичного запуска INT (INT группа)
Назад в эксплуатацию во время предыдущего матча, захваченной данной группы подпоследовательности начального индекса
3 общественности INT конец ()
Возвращает смещение после того, как последний символ соответствует.
4 общественного INT конец (INT группа)
Назад в эксплуатацию в предыдущем матче, по заданному смещению после последней группы символов после последовательности захвата.

Методы исследования

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

Нет . Метод и Описание
1 общественного логический lookingAt ()
Try область с начала начала входной последовательности соответствует шаблону.
2 общественного логический находка ()
Попробуйте найти входную последовательность, которая соответствует шаблону следующей последовательности.
3 общественного логический поиск (целое начало)
Сбрасывает этот Matcher, а затем пытается найти соответствие образцу, введите следующую подпоследовательности, начиная с указанного индекса.
4 публичные логические совпадения ()
Попробуйте весь регион и для сравнения с шаблоном.

метод замены

Альтернатива заключается в замене строки в методе ввода текста:

Нет . Метод и Описание
1 общественного Сличитель appendReplacement (StringBuffer С.Б., String замены)
Для достижения нетерминальные дополнения и замены шаг.
2 общественного StringBuffer appendTail (StringBuffer С.Б.)
Достичь терминала дополнения и замены шаг.
3 Строка replaceAll общественности (замена String)
Режим замены с заданной строкой замены, чтобы соответствовать последовательности ввода для каждой последовательности.
4 Строка replaceFirst общественности (замена String)
Режим замены с заданной строкой замены, соответствующей входной последовательности первой подпоследовательности.
5 открытые статические Строка quoteReplacement (String s)
Возвращает строку символьной строки замены. Этот метод возвращает строку, которая передается в качестве метода для работы в классе appendReplacement Matcher как буквенная строка.

начальный и конечный метод

Вот пример числа вхождений во входной строке для подсчета появляется слово «кот»:

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

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

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

спички и метод lookingAt

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

Эти два метода часто используются в начинается входной строки.

Через следующий пример, чтобы объяснить эту особенность:

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

replaceFirst методы и replaceAll

replaceFirst и replaceAll метод, используемый для замены регулярного выражения соответствия текста. Разница, replaceFirst заменить первый матч, replaceAll заменить все матчи.

Следующий пример, чтобы объяснить эту особенность:

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

appendReplacement методы и appendTail

Класс Сличитель также обеспечивает способ appendTail appendReplacement и заменить текст:

Посмотрите на следующий пример, чтобы объяснить эту особенность:

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

Методы класса PatternSyntaxException

PatternSyntaxException не является обязательным класс исключения, который указывает на регулярные синтаксические ошибки паттерн экспрессии.

Класс PatternSyntaxException предоставляет следующие методы, чтобы помочь нам увидеть, что произошла ошибка.

Мастер Йода рекомендует:  Интернет — всё по этой теме для программистов
Добавить комментарий