String input = "+375221234567";
boolean result = input.matches("(\\+375)\\d{9}");
System.out.println(result);Что если нам необходимо искать весьма специфические подстроки в тексте?
Что если нам необходимо проверить соответствие текста, какому-то шаблону?
Regular Expression
В строках на Java спецсимволы регулярных выражений надо записывать с помощью экранирования.
Например:
\t → \\t
\d → \\d
? → \?
StringString input = "+375221234567";
boolean result = input.matches("(\\+375)\\d{9}");
System.out.println(result);truesplit(String): String[]String text = "Java. Java? Java will never regret it!";
String[] words = text.split("\\s*(\\s|,|!|\\?|\\.)\\s*");
for (String word : words) {
System.out.println(word);
}Java
Java
Java
will
never
regret
itreplaceAll(String, String): StringString input = "Hello Java! Hello Javac! JavaSE 11.";
String myStr = input.replaceAll("Java(\\w*)", "HTML");
System.out.println(myStr);Hello HTML! Hello HTML! HTML 11.replaceFirst(String, String): StringString input = "Hello Java! Hello Javac! JavaSE 11.";
String myStr = input.replaceFirst("Java(\\w*)", "HTML");
System.out.println(myStr);Hello HTML! Hello Javac! JavaSE 11.Pattern and MatcherPattern and MatcherБолее мощные средства, для работы с регулярными выражениями предлагают классы из пакета java.util.regex:
Pattern
Matcher
Pattern and MatcherКласс Pattern служит для хранения регулярного выражения.
Класс Matcher служит для выполнения операций поиска и сравнения.
PatternPattern from Regular ExpressionДля этого используется статический метод compile(String regex) класса Pattern
Pattern pattern = Pattern.compile("[ ,.!?]");split(CharSequence): String[]import java.util.regex.Pattern;
public class Example {
public static void main(String[] args) {
String input = "Hello Java! Hello Javac! JavaSE 11.";
Pattern pattern = Pattern.compile("[ ,.!?]");
String[] words = pattern.split(input);
for (String word : words) {
System.out.println(word);
}
}
}Hello
Java
Hello
Javac
JavaSE
11matches(String, CharSequence): booleanString text = "Hello Java! How are you?";
boolean isMatched = Pattern.matches("Hello.+", text);
System.out.println(isMatched);true
matcher(String): MatcherString text = "Hello Java! How are you?";
Matcher matcher = pattern.matcher("Hello.+");Matchermatches(): booleanimport java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Example {
public static void main(String[] args) {
String text = "Hello Java! How are you?";
Pattern pattern = Pattern.compile("Hello.+");
Matcher matcher = pattern.matcher(text);
boolean isMatched = matcher.matches();
System.out.println(isMatched);
}
}true
lookingAt(): booleanString text = "Hello Java! How are you?";
Pattern pattern = Pattern.compile("Hello");
Matcher matcher = pattern.matcher(text);
boolean isLookingAt = matcher.lookingAt();
System.out.println(isLookingAt);true
replaceAll(String): StringString text = "Hello Java! Hello Javac! JavaSE 11.";
Pattern pattern = Pattern.compile("Java(\\w*)");
Matcher matcher = pattern.matcher(text);
String newStr = matcher.replaceAll("HTML");
System.out.println(newStr);Hello HTML! Hello HTML! HTML 11.
find(): booleanМетод ищет соответствие регулярному выражению в строке:
возвращает true, если соответствие найдено
false – если нет
find(): booleanString text = "Hello Java! Hello Javac! JavaSE 11.";
Pattern pattern = Pattern.compile("Java(\\w*)");
Matcher matcher = pattern.matcher(text);
System.out.println(matcher.find());true
start(): int and end(): intПозицию найденного совпадения можно найти с помощью методов:
start()
end()
Pattern p = Pattern.compile(" +- +");
Matcher matcher = p.matcher("Test - string - test");
while (matcher.find()) {
System.out.printf("[%d;%d)\n", matcher.start(), matcher.end());
}[4;10) [16;22)
group(): StringЧтобы узнать, как выглядит очередная найденная методом find(): boolean строка, можно использовать метод group(): String.
String input = "Hello Java! Hello Javac! JavaSE 11.";
Pattern pattern = Pattern.compile("Java(\\w*)");
Matcher matcher = pattern.matcher(input);
while (matcher.find()) {
System.out.println(matcher.group());
}group(): StringJava Javac JavaSE
group(): StringЧасть регулярного выражения можно выделить в группу, для этого его следует взять в круглые скобки.
При нахождении соответствия, указав методу group() номер, начиная с единицы, можно получить не все соответствие, а только одну из его групп.
Pattern pattern = Pattern.compile("www\\.(\\w+)\\.com");
Matcher matcher = pattern.matcher(" www.rakovets.com ");
boolean found = matcher.find();
if (found) {
System.out.println(matcher.group(1));
}rakovets
matcher.reset(String): MatcherЕсли необходимо работать с новой строкой, то необязательно создавать новый объект класса Matcher, можно использовать метод reset().
String text = "Hello";
Pattern pattern = Pattern.compile("Hello");
Matcher matcher = pattern.matcher(text);
System.out.println(matcher.matches());
Matcher reset = matcher.reset("Hello Java! How are you?");
System.out.println(matcher.matches());matcher.reset(String): Matchertrue false