Регулярные выражения
- Что такое регулярное выражение
- Pattern и Matcher классы
- Основные мета символы
- Сравнение регулярного выражения с текстом
- Простой валидатор ссылки
- Регулярное выражение для проверки email
- Методы Pattern.split(), String.split()
1. Что такое регулярное выражение
Регулярное выражение - это своего рода шаблон, который может быть применен к тексту. Java предоставляет пакет java.util.regex
для сопоставления с регулярными выражениями.
Регулярное выражение или соответствует тексту (его части) или нет. Если регулярное выражение совпадает с частью текста, то мы можем найти его. Если регулярное выражение составное, то мы можем легко выяснить, какая часть регулярного выражения совпадает с какой частью текста.
Например, есть следующая строка:
Используются файлы file1.doc, file2.txt.
А еще было бы неплохо обратить внимание на файл file3.img.
Также просмотрите содержимое file4.doc.
[a-zA-Z]+\\.[a-z]{3}
Регулярное выражение [a-z]+
соответствует всем строчным буквам в тексте. [a-z] означает любой символ от a до z включительно, и + означает «один или более» символов.
Рассмотрим пример нахождения регулярного выражения в тексте:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegexExample1 {
public static void main(String[] args) {
String stringPattern = "[a-z]+";
String text = "code 2 learn java tutorial";
Pattern pattern = Pattern.compile(stringPattern);
Matcher matcher = pattern.matcher(text);
while (matcher.find()) {
System.out.println(text.substring(matcher.start(), matcher.end()));
}
}
}
2. Pattern и Matcher классы
Pattern класс - объект класса составляет представление регулярного выражения. Класс Pattern не предусматривает никаких публичных конструкторов. Чтобы создать шаблон, необходимо сначала вызвать один из публичных статических методов, которые затем возвращают объект класса Pattern. Эти методы принимают регулярное выражение в качестве аргумента.
Matcher класс - объект «Искатель» является двигателем, который интерпретирует шаблон и выполняет операции сопоставления с входной строкой. Как и Pattern класс, Matcher не имеет публичных конструкторов. Вы получаете объект Matcher вызовом метода matcher(), на объекте класса Pattern.
Методы класса Matcher:
matches()
возвращаетtrue
, если шаблон соответствует всей строке, иначеfalse
.lookingAt()
возвращаетtrue
, если шаблон соответствует началу строки, иfalse
в противном случае.find()
возвращаетtrue
, если шаблон совпадает с любой частью текста.
3. Основные мета символы
^ | (крышка) начало проверяемой строки. |
$ | (доллар) конец проверяемой строки. |
. | (точка) представляет собой сокращенную форму записи для символьного класса, совпадающего с любым символом. |
| | Означает «или». Подвыражения, объединенные этим способом, называются альтернативами (alternatives). |
? | (знак вопроса) означает, что предшествующий ему символ является необязательным. |
+ | Обозначает «один или несколько экземпляров непосредственно предшествующего элемента. |
* | Любое количество экземпляров элемента (в том числе и нулевое). |
\\d | Цифровой символ. |
\\D | Не цифровой символ. |
\\s | Пробельный символ. |
\\S | Не пробельный символ. |
\\w | Буквенный(латиница), цифровой символ или знак подчёркивания. |
\\W | Любой символ, кроме буквенного, цифрового символа или знака подчёркивания. |
[abc] | Диапазон символов или цифр. |
Примеры регулярных выражений:
a? - a один раз или ни разу
a* - a ноль или более раз
a+ - a один или более раз
a{n} - a n раз
a{n,}- a n или более раз
a{n,m}- a от n до m
4. Сравнение регулярного выражения с текстом
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegexExample2 {
public static void main(String[] args) {
Pattern pattern = Pattern.compile("a*b");
Matcher matcher = pattern.matcher("aaab");
boolean b = matcher.matches();
System.out.println(b);
}
}
5. Простой валидатор ссылки
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegexExample3 {
public static void main(String[] args) {
System.out.println(test("google.com"));
System.out.println(test("reference1.ua"));
System.out.println(test("reference1.org"));
}
public static boolean test(String testString) {
Pattern pattern = Pattern.compile(".+\\.(com|ua|ru)");
Matcher matcher = pattern.matcher(testString);
return matcher.matches();
}
}
6. Регулярное выражение для проверки email
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegexExample4 {
public static void main(String[] args) {
String regex = "(\\w{6,})@(\\w+\\.)([a-z]{2,4})";
String s = "адреса эл.почты:ivanov@gmail.com, sidorov@bsu.by!";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(s);
while (matcher.find()) {
System.out.println("e-mail: " + matcher.group());
}
}
}
7. Методы Pattern.split(), String.split()
Класс Pattern
содержит метод split()
, который разбивает строку на подстроки, используя указанный в шаблоне разделитель:
import java.util.Arrays;
import java.util.regex.Pattern;
public class RegexExample5 {
public static void main(String[] args) {
Pattern pattern = Pattern.compile("\\d+\\s?");
String[] words = pattern.split("java5tiger 77 java6mustang");
System.out.print(Arrays.toString(words));
}
}
Класс String
определяет такой же метод split()
:
import java.util.Arrays;
public class RegexExample6 {
public static void main(String[] args) {
String str = "java5tiger 77 java6mustang";
String[] words = str.split("\\d+\\s?");
System.out.print(Arrays.toString(words));
}
}
Please log in or register to have a possibility to add comment.