Статьи

Регулярные выражения в Java — Введение в Soft

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

Регулярное выражение либо соответствует тексту (или его части), либо не соответствует.
* Если регулярное выражение соответствует части текста, то мы можем выяснить, какая именно.
** Если регулярное выражение сложное, то мы можем легко определить, какая часть регулярного выражения соответствует какой части текста.

Первый пример

Регулярное выражение « [az] + » соответствует всем строчным буквам в тексте.
[az] означает любой символ от a до z включительно, а + означает «один или несколько».

Предположим, мы предоставляем строку «code 2 learn java tutorial».

Как это сделать на Java

Сначала вы должны скомпилировать шаблон:
импорт java.util.regex. *;
Pattern p = Pattern.compile («[az] +»);

Далее необходимо создать сопоставление для текста, отправив сообщение в шаблон:
Matcher m = p.matcher («Учебник Java 2 по кодексу 2»);

НОТА :

Ни у Pattern, ни у Matcher нет открытого конструктора, мы создаем его с помощью методов в классе Pattern.

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

Класс Matcher : объект Matcher — это механизм, который интерпретирует шаблон и выполняет операции сопоставления с входной строкой. Как и класс Pattern, Matcher не определяет общедоступных конструкторов. Вы получаете объект Matcher, вызывая метод matcher для объекта Pattern.

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

m.matches () возвращает true, если шаблон соответствует всей строке, или же false.
m.lookingAt () возвращает true, если шаблон соответствует началу строки, и false в противном случае.
m.find () возвращает true, если шаблон соответствует какой-либо части текста.

Нахождение того, что было подобрано

После успешного сопоставления m.start () вернет индекс первого сопоставленного символа, а m.end () вернет индекс последнего сопоставленного символа плюс один.

Если совпадение не было предпринято или совпадение было неудачным, m.start () и m.end () сгенерируют исключение IllegalStateException
— Это RuntimeException, поэтому вам не нужно его ловить

Может показаться странным, что m.end () возвращает индекс последнего сопоставленного символа плюс один, но это как раз то, что требуется большинству методов String
— Например, « сейчас время » .substring (m.start () , m.end () )
вернет точно совпадающую подстроку.

Java программа:

01
02
03
04
05
06
07
08
09
10
11
12
13
import java.util.regex.*;
 
public class RegexTest {
   public static void main(String args[]) {
      String pattern = "[a-z]+";
      String text = "code 2 learn java tutorial";
      Pattern p = Pattern.compile(pattern);
      Matcher m = p.matcher(text);
      while (m.find()) {
          System.out.print(text.substring(m.start(), m.end()) + "*");
      }
  }
}

Вывод : код * выучить * Java * учебник *.

Дополнительные методы

Если m совпадает, то

m.replaceFirst ( замена ) возвращает новую строку, в которой первая подстрока, соответствующая шаблону, была заменена заменой.
m.replaceAll ( замена ) возвращает новую строку, где каждая подстрока, соответствующая шаблону, была заменена заменой.
m.find ( startIndex ) ищет следующее совпадение с шаблоном, начиная с указанного индекса
m.reset () сбрасывает это сопоставление
m.reset ( newText ) сбрасывает этот сопоставитель и дает ему новый текст для проверки (который может быть String, StringBuffer или CharBuffer)

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

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

Подвыражение Спички
^ Соответствует началу строки.
$ Соответствует концу строки.
, Соответствует любому отдельному символу, кроме новой строки. Использование опции m позволяет ему соответствовать новой строке.
[…] Соответствует любому отдельному символу в скобках.
[^ …] Соответствует любому отдельному символу не в скобках
\ A Начало всей строки
\ г Конец всей строки
\ Z Конец всей строки, кроме допустимого конечного конца строки.
повторно * Соответствует 0 или более вхождений предыдущего выражения.
ре + Соответствует 1 или более предыдущей вещи
повторно? Соответствует 0 или 1 вхождению предыдущего выражения.
re {n} Совпадает ровно с числом вхождений предыдущего выражения.
re {n,} Соответствует n или более вхождений предшествующего выражения.
re {n, m} Соответствует не менее n и не более m вхождений предыдущего выражения.
| б Соответствует либо a, либо b.
(ре) Группирует регулярные выражения и запоминает сопоставленный текст.
(?: re) Группирует регулярные выражения без запоминания сопоставленного текста.
(?> re) Соответствует независимому образцу без возврата.
\ ш Соответствует символам слова.
\ W Соответствует несловесным персонажам.
\ s Соответствует пробелам. Эквивалентен [\ t \ n \ r \ f].
\ S Соответствует непробельному пространству.
\ d Соответствует цифрам. Эквивалентно [0-9].
\ D Совпадает с нецифровыми числами.
\ A Соответствует началу строки.
\ Z Соответствует концу строки. Если новая строка существует, она совпадает непосредственно перед новой строкой.
\ г Соответствует концу строки.
\ГРАММ Точки совпадений, где последний матч закончился.
\ п Обратная ссылка для захвата номера группы «n»
\ б Соответствует границам слов, когда они находятся вне скобок. Соответствует Backspace (0x08) внутри скобок.
\ B Соответствует безсловным границам.
\ n, \ t и т. д. Соответствует переводу строки, возврату каретки, вкладкам и т. Д.
\ Q Escape (цитата) всех символов до \ E
\ E Завершает цитирование, начинающееся с \ Q

Справка: Регулярные выражения в Java от нашего партнера JCG