Поиск и сопоставление
matches, find, lookingAt
«Поиск и сопоставление» — бесплатный урок Java Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Java Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Java Academy содержит 4 уроков всего.
Три способа применить шаблон
Matcher предоставляет три основных вида проверки:
matches()требует, чтобы совпадению соответствовало всё входное значение.lookingAt()требует совпадения в начале.find()ищет совпадение в любом месте.
import java.util.regex.Pattern;
import java.util.regex.Matcher;
public class Main {
public static void main(String[] args) {
Matcher m = Pattern.compile("\\d+").matcher("42");
System.out.println(m.matches());
}
}matches: вся входная строка
matches возвращает true, только если вся строка соответствует шаблону, как если бы с обеих сторон стояли якоря.
import java.util.regex.Pattern;
public class Main {
public static void main(String[] args) {
Pattern p = Pattern.compile("\\d+");
System.out.println(p.matcher("123").matches());
System.out.println(p.matcher("123abc").matches());
}
}lookingAt: совпадение в начале
lookingAt успешно выполняется, если входное значение начинается с совпадения, даже если остальная часть ему не соответствует.
import java.util.regex.Pattern;
public class Main {
public static void main(String[] args) {
Pattern p = Pattern.compile("\\d+");
System.out.println(p.matcher("123abc").lookingAt());
System.out.println(p.matcher("abc123").lookingAt());
}
}find: совпадение в любом месте
find просматривает строку вперёд в поисках следующего совпадения. Он возвращает true, если начиная с текущей позиции существует хотя бы одно совпадение.
import java.util.regex.Pattern;
public class Main {
public static void main(String[] args) {
Pattern p = Pattern.compile("\\d+");
System.out.println(p.matcher("abc123def").find());
}
}Перебор всех совпадений с помощью find
Вызов find в цикле позволяет пройти по всем совпадениям во входном значении.
import java.util.regex.Pattern;
import java.util.regex.Matcher;
public class Main {
public static void main(String[] args) {
Matcher m = Pattern.compile("\\d+").matcher("a1bb22ccc333");
while (m.find()) {
System.out.println(m.group());
}
}
}Позиции совпадения: start и end
После успешного совпадения start() и end() возвращают диапазон индексов, а group() — совпавший текст.
import java.util.regex.Pattern;
import java.util.regex.Matcher;
public class Main {
public static void main(String[] args) {
Matcher m = Pattern.compile("\\d+").matcher("abc123");
if (m.find()) {
System.out.println(m.group() + " at [" + m.start() + "," + m.end() + ")");
}
}
}Якоря с find
Якоря ^ и $ позволяют использовать find для проверки начала или конца. Здесь ^\d+ сопоставляется только с цифрами в самом начале.
import java.util.regex.Pattern;
public class Main {
public static void main(String[] args) {
Pattern p = Pattern.compile("^\\d+");
System.out.println(p.matcher("123abc").find());
System.out.println(p.matcher("abc123").find());
}
}Сброс сопоставителя
reset() возвращает сопоставитель в начало, чтобы вы могли снова просмотреть те же входные данные.
import java.util.regex.Pattern;
import java.util.regex.Matcher;
public class Main {
public static void main(String[] args) {
Matcher m = Pattern.compile("a").matcher("aaa");
int first = 0;
while (m.find()) first++;
m.reset();
int second = 0;
while (m.find()) second++;
System.out.println(first + " " + second);
}
}Повторное использование сопоставителя для новых входных данных
reset(newInput) повторно использует тот же объект сопоставления с другой строкой, избегая выделения памяти под новый объект.
import java.util.regex.Pattern;
import java.util.regex.Matcher;
public class Main {
public static void main(String[] args) {
Matcher m = Pattern.compile("\\d+").matcher("abc");
m.reset("xyz789");
System.out.println(m.find());
System.out.println(m.group());
}
}Сравнение matches и find
Выбирайте метод в зависимости от задачи: используйте matches, чтобы проверить всё значение целиком, например полный ID, а find — чтобы извлечь или найти части внутри более длинного текста.
import java.util.regex.Pattern;
public class Main {
public static void main(String[] args) {
Pattern id = Pattern.compile("[A-Z]{2}\\d{4}");
System.out.println(id.matcher("AB1234").matches());
System.out.println(id.matcher("id=AB1234;").find());
}
}Подсчёт совпадений
Частая задача — подсчитать количество вхождений. Запустите find в цикле и увеличивайте счётчик.
import java.util.regex.Pattern;
import java.util.regex.Matcher;
public class Main {
public static void main(String[] args) {
Matcher m = Pattern.compile("o").matcher("foo boo zoo");
int count = 0;
while (m.find()) count++;
System.out.println(count);
}
}Быстрая проверка
Какой метод требует, чтобы вся входная строка соответствовала шаблону?
Повторение
Вы находили совпадения:
matchesпроверяет всё входное значение,lookingAt— начало, аfindищет совпадение в любом месте.- Запустите
findв цикле, чтобы перебрать все совпадения и получить значения с помощьюgroup,startиend. resetвозвращает сопоставитель в начало, аreset(input)повторно использует его с новым текстом.
Часто задаваемые вопросы
Урок «Поиск и сопоставление» бесплатный?
Да — полный текст урока «Поиск и сопоставление» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Java Academy, подпишись на CoddyKit PRO. Курс Java Academy содержит 4 уроков всего.
Чему я научусь в уроке «Поиск и сопоставление»?
matches, find, lookingAt Ты практикуешь Java Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Java Academy?
Предыдущий опыт не требуется. Java Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.
Сколько времени занимает урок «Поиск и сопоставление»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Java Academy?
Да. Каждый урок Java Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Компиляция шаблонов
- Поиск и сопоставление
- Захватывающие группы
- Замена с помощью регулярных выражений