Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗jvSpRgChS 64 of 322 menu
◀ ▶

Наборы символов в регулярках 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', а между ними - маленькие латинские буквы и цифры, не затронув остальных.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить