Регулярные выражения служат для нахождения некоторого шаблона текста.
Они есть во всех языках программирования, но в данном случае мы будем говорить про Java.
Регулярки лежат в пакете import java.util.regex.*;
Два класса для работы с регулярками — это Pattern(переводится на русский как Шаблон) и Matcher(соответствие, совпадение.)
Эти два класса имеют модификатор final, т.е. от них НЕЛЬЗЯ наследоваться. Также у этих классов нет КОНСТРУКТОРОВ.

Пример регулярок — классы символов:

[a-z] — один строчный символ от a до z
[A-Z] — один прописной символ от A-Z
[a-zA-Z] — один строчный или один прописной символ от а-z
1[23456] — соответсвтует числам 12, 13, 14, 15, 16. Но не соответствует числу 17
1[2-6] — более короткая запись 1[23456]
2[38] — соответсвтует числам 23 и 28
[0-9] любая цифра 0, 1, 2, 3, 4, 5, 6, 7, 8, 9.
\\d — тоже значит любая цифра, сокращенная запись [0-9]
\\D — не ЦИФРА
\\s — пробел
\\S — не пробел

Пример, есть некая строка:

String str = "Steven Bernson, Attorney at Law 523 Broadway, suite 152 New York, NY, 10120, USA";

Необходимо достать из строки только строчные буквы:

ArrayList<String> list = new ArrayList<>();
		
String str = "Steven Bernson, Attorney at Law 523 Broadway, suite 152 New York, NY, 10120, USA";
		
Pattern p = Pattern.compile("[a-z]");
Matcher m = p.matcher(str);
while(m.find()) {
    list.add(m.group());
}
System.out.println(list);

Сначала мы создаём коллекцию list — в данную коллекцию будем добавлять результаты
Создадим экземпляр класса Pattern. Для этого вызовем статический метод compile, который на вход принимает регулярку.
Далее мы создаём экземпляр класса Matcher. Для этого в классе Pattern есть метод matcher, куда мы передаем строку str:

public Matcher matcher

Задаем цикл, пока m.find() == true. Конечно, «== true» можно и не писать.
m.find() — возвращает true, если регулярка совпадает с любой из частей текста. Если регулярка совпадает — до в список list мы добавляем
m.group() — возвращае строку, которая соответсвтвует регулярке
В конце, просто печатаем список.

В данном случае вывод на консоль:
[t, e, v, e, n, e, r, n, s, o, n, t, t, o, r, n, e, y, a, t, a, w, r, o, a, d, w, a, y, s, u, i, t, e, e, w, o, r, k]

Чтобы вывести только ПРОПИСНЫЕ буквы, необходимо изменить регулярку [a-z] на [A-Z]
Вывод на консоль:
[S, B, A, L, B, N, Y, N, Y, U, S, A]

Теперь чуть усложним задачу и нам необходимо вывести все слова. Есть регулярка +
+ — если + стоит после символа, то повторение 1 или больше раз

[a-zA-Z]+ — соответствует строкам, которые начинаются с любой буквы английского алфавита и повторяются 1 или больше раз

Вывод на консоль будет:
[Steven, Bernson, Attorney, at, Law, Broadway, suite, New, York, NY, USA]

Важная регулярка «?»

? — после символа означает повторение этого символа или 1 раз или 0 раз

Каким числам это соответсвует:
1[56]?2
152, 162, 12
Соответсвенно на консоль будет выведено для нашей строки str:
[152, 12]
Почему вывелось 12 ? Т.к. наша строка содержит 10120, то отсюда 12 и взялось.

Реклама