Операторы повторения символов в регулярках
Бывают ситуации, когда нужно указать, что
символ повторяется заданное количество
раз. Если точное число повторений неизвестно,
то можно просто написать его несколько раз
- 'aaaa'. Но что делать, если нужно
сказать такое: повторить один или более
раз?
Для этого существуют операторы (квантификаторы)
повторения: плюс + (один и более
раз), звездочка * (ноль или более
раз) и вопрос ? (ноль или один раз).
Эти операторы действуют на тот символ,
который стоит перед ними.
Посмотрим на работу этих операторов на примерах.
Найдем все подстроки по шаблону буква
'x', буква 'a' один или более
раз, буква 'x':
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Main {
public static void main(String[] args) {
String txt = "xx xax xaax xaaax xbx";
Pattern pattern = Pattern.compile("xa+x");
Matcher matcher = pattern.matcher(txt);
String res = matcher.replaceAll("!");
System.out.println(res);
}
}
Результат выполнения кода:
"xx ! ! ! xbx"
Найдем все подстроки по шаблону буква
'x', буква 'a' ноль или более
раз, буква 'x':
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Main {
public static void main(String[] args) {
String txt = "xx xax xaax xaaax xbx";
Pattern pattern = Pattern.compile("xa*x");
Matcher matcher = pattern.matcher(txt);
String res = matcher.replaceAll("!");
System.out.println(res);
}
}
Результат выполнения кода:
"! ! ! ! xbx"
Найдем все подстроки по шаблону буква
'x', буква 'a' ноль или один
раз, буква 'x':
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Main {
public static void main(String[] args) {
String txt = "xx xax xaax xbx";
Pattern pattern = Pattern.compile("xa?x");
Matcher matcher = pattern.matcher(txt);
String res = matcher.replaceAll("!");
System.out.println(res);
}
}
Результат выполнения кода:
"! ! xaax xbx"
Дана строка:
public class Main {
public static void main(String[] args) {
String txt = "aa aba abba abbba abca abea";
}
}
Напишите регулярку, которая найдет строки
'aba', 'abba', 'abbba'
по шаблону: буква 'a', буква
'b' любое количество раз, буква
'a'.
Дана строка:
public class Main {
public static void main(String[] args) {
String txt = "aa aba abba abbba abca abea";
}
}
Напишите регулярку, которая найдет строки
'aa', 'aba', 'abba',
'abbba' по шаблону: буква
'a', буква 'b' любое количество
раз (в том числе ни одного раза), буква
'a'.
Дана строка:
public class Main {
public static void main(String[] args) {
String txt = "aa aba abba abbba abca abea";
}
}
Напишите регулярку, которая найдет строки
'aa', 'aba' по шаблону:
буква 'a', буква 'b' один
раз или ни одного, буква 'a'.
Дана строка:
public class Main {
public static void main(String[] args) {
String txt = "aa aba abba abbba abca abea";
}
}
Напишите регулярку, которая найдет строки
'aa', 'aba', 'abba',
'abbba', не захватив 'abca'
и 'abea'.