String input = "+375221234567";
boolean result = input.matches("(\\+375)\\d{9}");
System.out.println(result);
Что если нам необходимо искать весьма специфические подстроки в тексте?
Что если нам необходимо проверить соответствие текста, какому-то шаблону?
Regular Expression
В строках на Java спецсимволы регулярных выражений надо записывать с помощью экранирования.
Например:
\t
→ \\t
\d
→ \\d
?
→ \?
String
String input = "+375221234567";
boolean result = input.matches("(\\+375)\\d{9}");
System.out.println(result);
true
split(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
it
replaceAll(String, String): String
String 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): String
String 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 Matcher
Pattern
and Matcher
Более мощные средства, для работы с регулярными выражениями предлагают классы из пакета java.util.regex
:
Pattern
Matcher
Pattern
and Matcher
Класс Pattern
служит для хранения регулярного выражения.
Класс Matcher
служит для выполнения операций поиска и сравнения.
Pattern
Pattern
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
11
matches(String, CharSequence): boolean
String text = "Hello Java! How are you?";
boolean isMatched = Pattern.matches("Hello.+", text);
System.out.println(isMatched);
true
matcher(String): Matcher
String text = "Hello Java! How are you?";
Matcher matcher = pattern.matcher("Hello.+");
Matcher
matches(): boolean
import 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(): boolean
String 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): String
String 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(): boolean
String 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(): String
Java 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): Matcher
true false