Регулярные выражения Java: часть 5 — Подробнее о методах группировки
В последней части мы использовали метод группировки, чтобы пользователи могли вводить данные. В этой части вы увидите, что технику группировки можно применять и в других случаях.
Другой случай использования метода группировки — предоставление списка элементов, из которого пользователи могут выбирать.
Давайте посмотрим следующий код:
import java.util.Scanner;
public class Demo {
public static void main(String[] args) {
boolean flag;
Scanner sc = new Scanner(System.in);
do {
String favorPattern = "(sport|music|book|movie)";
System.out.print("Input a favorite (sport,music,book,movie): ");
String input = sc.next();
flag = input.matches(favorPattern);
if (!flag) System.out.println("Invalid data!");
} while (!flag);
System.out.println("Valid data");
}
}
В коде у меня был шаблон:
String emailPattern = "(sport|music|book|movie)";
Чтобы предоставить список элементов, из которых пользователи могут выбирать, нам нужно поместить эти элементы в группу и разделить каждый элемент вертикальной чертой. Это означает, что пользователи могут вводить только один из них в группе.
Запустим программу и увидим:
Input a favorite (sport,music,book,movie): reading
Invalid data!
Input a favorite (sport,music,book,movie): sport
Valid data
«чтение»: недействительно, потому что его не было в списке
«спорт»: действительный, потому что он был в списке
Другой случай заключается в том, что мы можем применить технику группировки при проверке форматов даты и времени, которые очень часто встречаются при вводе данных.
Давайте посмотрим следующий код:
import java.util.Scanner;
public class Demo {
public static void main(String[] args) {
boolean flag;
Scanner sc = new Scanner(System.in);
do {
String dobPattern = "([1-9]{1,2}/)?([1-9]{1,2})/([0-9]{4})";
System.out.print("Input your day of birth: ");
String input = sc.next();
flag = input.matches(dobPattern);
if (!flag) System.out.println("Invalid data!");
} while (!flag);
System.out.println("Valid data");
}
}
В коде я использовал следующий шаблон для проверки формата дня рождения:
String dobPattern = "([1-9]{1,2}/)?([1-9]{1,2})/([0-9]{4})";
В шаблоне у меня есть 3 группы:
Группа 1: ([1-9]{1,2}/)?
Это на дату. В этой группе пользователи должны ввести не менее 1 цифры и не более 2 цифр от 1 до 9; за которым следует / для разделения с месяцем. Пользователи могут игнорировать эту часть.
Группа 2: ([1-9]{1,2})
Это за месяц. Я уверен, вы понимаете, что это значит. Ну, это не отличается от группы 1.
Группа 3: ([0-9]{4})
Это за год. Пользователи должны ввести все 4 цифры
Запустим и проверим:
Input day of birth: 1212/1980
Invalid data!
Input day of birth: 12/1980
Valid data
Input day of birth: 1/12/1980
Valid data
1212/1980: недействительно, потому что не было / между датой и месяцем
12/1980: полностью действителен, поскольку пользователи могут игнорировать дату
12.01.1980: также действует
Сопоставление текста для проверки — это только одно из применений регулярных выражений. Существует бесчисленное множество способов применения регулярных выражений.
Давайте перейдем к следующей части, чтобы увидеть, что мы можем применять регулярные выражения для манипуляций со строками.
Предыдущая часть
Следующая часть
—
Посещать Learnbyproject.net бесплатно Курсы по регулярным выражениям и другие бесплатные курсы