Наборы символов в регулярках Java
Группы символов \d и \w не
очень гибкие. Даже такая простая задача,
как найти все буквы, но не цифры -
не может быть решена ими. Для таких задач
следует использовать квадратные скобки,
представляющие собой операцию 'или'.
Квадратные скобки заменяют собой один
символ, любой из перечисленных внутри. К
примеру, вот так: x[abc]x - мы
говорим, что по краям должны стоять буквы
икс, а внутри - один символ: или 'a',
или 'b', или 'c'.
После квадратных скобок можно писать
операторы повторения. К примеру, вот так:
x[abc]+x - мы говорим, что внутри
иксов может быть любое количество символов
'a', 'b' и 'c' - в
любых комбинациях.
Можно не только перечислять символы, но
создавать группы символов, записывая между
двумя символами дефис. К примеру, вот так:
[a-d] - мы получаем все символы от
'a' до 'd'.
Посмотрим на примерах.
В данном примере шаблон поиска выглядит
так: между иксами любая буква от
'a' до 'z':
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Main {
public static void main(String[] args) {
String txt = "xax xbx xcx x@x";
Pattern pattern = Pattern.compile("x[a-z]x");
Matcher matcher = pattern.matcher(txt);
String res = matcher.replaceAll("!");
System.out.println(res);
}
}
Результат выполнения кода:
"! ! ! x@x"
В данном примере шаблон поиска выглядит
так: между иксами любая буква от
'a' до 'k':
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Main {
public static void main(String[] args) {
String txt = "xax xbx xmx x@x";
Pattern pattern = Pattern.compile("x[a-k]x");
Matcher matcher = pattern.matcher(txt);
String res = matcher.replaceAll("!");
System.out.println(res);
}
}
Результат выполнения кода:
"! ! xmx x@x"
В данном примере шаблон поиска выглядит
так: между иксами любая буква от
'A' до 'Z':
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Main {
public static void main(String[] args) {
String txt = "xax xBx xcx x@x";
Pattern pattern = Pattern.compile("x[A-Z]x");
Matcher matcher = pattern.matcher(txt);
String res = matcher.replaceAll("!");
System.out.println(res);
}
}
Результат выполнения кода:
"xax ! xcx x@x"
В данном примере шаблон поиска выглядит
так: между иксами любая цифра от 0
до 9:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Main {
public static void main(String[] args) {
String txt = "xax x1x x3x x5x x@x";
Pattern pattern = Pattern.compile("x[0-9]x");
Matcher matcher = pattern.matcher(txt);
String res = matcher.replaceAll("!");
System.out.println(res);
}
}
Результат выполнения кода:
"xax ! ! ! x@x"
В данном примере шаблон поиска выглядит
так: между иксами любая цифра от 3
до 7:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Main {
public static void main(String[] args) {
String txt = "xax x1x x3x x5x x@x";
Pattern pattern = Pattern.compile("x[3-7]x");
Matcher matcher = pattern.matcher(txt);
String res = matcher.replaceAll("!");
System.out.println(res);
}
}
Результат выполнения кода:
"xax x1x ! ! x@x"
В данном примере шаблон поиска выглядит
так: между иксами любая буква от
'a' до 'z' или цифра от
1 до 9:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Main {
public static void main(String[] args) {
String txt = "xax x1x x3x x5x x@x";
Pattern pattern = Pattern.compile("x[a-z1-9]x");
Matcher matcher = pattern.matcher(txt);
String res = matcher.replaceAll("!");
System.out.println(res);
}
}
Результат выполнения кода:
"! ! ! ! x@x"
В данном примере шаблон поиска выглядит
так: между иксами любая буква от
'a' до 'z' или буква от
'A' до 'Z':
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Main {
public static void main(String[] args) {
String txt = "xax xBx xcx x5x x@x";
Pattern pattern = Pattern.compile("x[a-zA-Z]x");
Matcher matcher = pattern.matcher(txt);
String res = matcher.replaceAll("!");
System.out.println(res);
}
}
Результат выполнения кода:
"! ! ! x5x x@x"
В данном примере шаблон поиска выглядит
так: между иксами любая буква от
'a' до 'z' или цифры 1,
2:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Main {
public static void main(String[] args) {
String txt = "xax xbx x1x x2x x3x";
Pattern pattern = Pattern.compile("x[a-z12]x");
Matcher matcher = pattern.matcher(txt);
String res = matcher.replaceAll("!");
System.out.println(res);
}
}
Результат выполнения кода:
"! ! ! ! x3x"
В данном примере шаблон поиска выглядит
так: между иксами буквы от 'a'
до 'z' в количестве от 1 и
более:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Main {
public static void main(String[] args) {
String txt = "xx xabesx xaadx x123x xa3x";
Pattern pattern = Pattern.compile("x[a-z]+x");
Matcher matcher = pattern.matcher(txt);
String res = matcher.replaceAll("!");
System.out.println(res);
}
}
Результат выполнения кода:
"xx ! ! ! x123x xa3x"
Сделаем так, чтобы количество букв могло быть и ноль:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Main {
public static void main(String[] args) {
String txt = "xx xabesx xaadx x123x xa3x";
Pattern pattern = Pattern.compile("x[a-z]*x");
Matcher matcher = pattern.matcher(txt);
String res = matcher.replaceAll("!");
System.out.println(res);
}
}
В результате мы получим:
"! ! ! ! x123x xa3x"
Внутри квадратных скобок также можно указывать экранированные символы. Найдем последовательность букв и цифр, повторяющуюся ноль или более раз:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Main {
public static void main(String[] args) {
String txt = "xx x@x xadx xas12x xa3x";
Pattern pattern = Pattern.compile("x[a-z\\d]*x");
Matcher matcher = pattern.matcher(txt);
String res = matcher.replaceAll("!");
System.out.println(res);
}
}
Результат выполнения кода:
"! x@x ! ! !"
Если же нам нужно указать еще одни квадратные скобки, то мы их тоже обязательно экранируем:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Main {
public static void main(String[] args) {
String txt = "xx xrx xas[]x x3x";
Pattern pattern = Pattern.compile("x[a-z\\[\\]]*x");
Matcher matcher = pattern.matcher(txt);
String res = matcher.replaceAll("!");
System.out.println(res);
}
}
Результат выполнения кода:
"! ! ! x3x"
Дана строка:
public class Main {
public static void main(String[] args) {
String txt = "aba aea aca aza axa";
}
}
Напишите регулярку, которая найдет по
следующему шаблону: по краям стоят буквы
'a', а между ними - буква 'b',
'e' или 'x'.
Дана строка:
public class Main {
public static void main(String[] args) {
String txt = "a1a a3a a7a a9a aba";
}
}
Напишите регулярку, которая найдет по
следующему шаблону: по краям стоят буквы
'a', а между ними - цифра от
3 до 6.
Дана строка:
public class Main {
public static void main(String[] args) {
String txt = "aba aea afa aha aga";
}
}
Напишите регулярку, которая найдет по
следующему шаблону: по краям стоят буквы
'a', а между ними - буква от
'a' до 'g'.
Дана строка:
public class Main {
public static void main(String[] args) {
String txt = "aba aea afa aha aga";
}
}
Напишите регулярку, которая найдет по
следующему шаблону: по краям стоят буквы
'a', а между ними - буква от
'a' до 'f' и от 'j'
до 'z'.
Дана строка:
public class Main {
public static void main(String[] args) {
String txt = "aAa aea aEa aJa a3a";
}
}
Напишите регулярку, которая найдет по
следующему шаблону: по краям стоят буквы
'a', а между ними - буква от
'a' до 'f' и от 'A'
до 'D'.
Дана строка:
public class Main {
public static void main(String[] args) {
String txt = "aAXa aeffa aGha aza ax23a a3sSa";
}
}
Напишите регулярку, которая найдет по
следующему шаблону: по краям стоят буквы
'a', а между ними - маленькие
латинские буквы, не затронув остальных.
Дана строка:
public class Main {
public static void main(String[] args) {
String txt = "aAXa aeffa aGha aza ax23a a3sSa";
}
}
Напишите регулярку, которая найдет по
следующему шаблону: по краям стоят буквы
'a', а между ними - маленькие и
большие латинские буквы, не затронув
остальных.
Дана строка:
public class Main {
public static void main(String[] args) {
String txt = "aAXa aeffa aGha aza ax23a a3sSa";
}
}
Напишите регулярку, которая найдет по
следующему шаблону: по краям стоят буквы
'a', а между ними - маленькие
латинские буквы и цифры, не затронув
остальных.