Группы символов в регулярках Java
Существуют специальные команды, которые
позволяют выбрать сразу целые группы
символов. Команда \d означает цифру
от 0 до 9. Команда \w
обозначает цифру, латинскую букву или знак
подчеркивания. Команда \s обозначает
пробел или пробельный символ: пробел,
перевод строки, табуляцию. Можно инвертировать
значение команды, написав большую букву:
например, если \d - цифра, то
\D - не цифра.
Найдем все цифры:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Main {
public static void main(String[] args) {
String txt = "1 12 123";
Pattern pattern = Pattern.compile("\\d");
Matcher matcher = pattern.matcher(txt);
String res = matcher.replaceAll("!");
System.out.println(res);
}
}
Результат выполнения кода:
"! !! !!!"
Операторы повторения считают команды-группы
одним целым, то есть группирующие скобки
не нужны. В следующем примере шаблон поиска
выглядит так: цифра от 0 до
9 один или более раз:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Main {
public static void main(String[] args) {
String txt = "1 12 123 abc @@@";
Pattern pattern = Pattern.compile("\\d+");
Matcher matcher = pattern.matcher(txt);
String res = matcher.replaceAll("!");
System.out.println(res);
}
}
Результат выполнения кода:
"! ! ! abc @@@"
В следующем примере шаблон поиска выглядит
так: все что угодно один или более раз,
но не цифра от 0 до 9:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Main {
public static void main(String[] args) {
String txt = "123abc3@@";
Pattern pattern = Pattern.compile("\\D+");
Matcher matcher = pattern.matcher(txt);
String res = matcher.replaceAll("!");
System.out.println(res);
}
}
Результат выполнения кода:
"123!3!"
В данном примере шаблон поиска выглядит так: пробельный символ один раз:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Main {
public static void main(String[] args) {
String txt = "1 12 123 abc @@@";
Pattern pattern = Pattern.compile("\\s");
Matcher matcher = pattern.matcher(txt);
String res = matcher.replaceAll("!");
System.out.println(res);
}
}
Результат выполнения кода:
"1!12!123!abc!@@@"
В данном примере шаблон поиска выглядит
так: НЕ пробельный символ один или более
раз. Все подстроки, разделенные
пробелами, заменятся на '!':
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Main {
public static void main(String[] args) {
String txt = "1 12 123 abc @@@";
Pattern pattern = Pattern.compile("\\S+");
Matcher matcher = pattern.matcher(txt);
String res = matcher.replaceAll("!");
System.out.println(res);
}
}
Результат выполнения кода:
"! ! ! ! !"
В данном примере шаблон поиска выглядит
так: цифра или буква один или более
раз. Все подстроки, состоящие из цифр
и букв, заменятся на '!':
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Main {
public static void main(String[] args) {
String txt = "1 12 123a Abc @@@";
Pattern pattern = Pattern.compile("\\w+");
Matcher matcher = pattern.matcher(txt);
String res = matcher.replaceAll("!");
System.out.println(res);
}
}
Результат выполнения кода:
"! ! ! ! @@@"
В данном примере шаблон поиска выглядит
так: НЕ цифра и НЕ буква один или более
раз. Под данное определение в нашем
случае попадает '@@@' и все пробелы
(они ведь тоже не цифры и не буквы).
Обратите внимание на то, что в конце один
'!' - в него преобразовалась строка
' @@@' - с пробелом впереди:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Main {
public static void main(String[] args) {
String txt = "1 12 123 Abc @@@";
Pattern pattern = Pattern.compile("\\W+");
Matcher matcher = pattern.matcher(txt);
String res = matcher.replaceAll("!");
System.out.println(res);
}
}
Результат выполнения кода:
"1!12!123!Abc!"
Дана строка:
public class Main {
public static void main(String[] args) {
String txt = "a1a a2a a3a a4a a5a aba aca";
}
}
Напишите регулярку, которая найдет строки,
в которых по краям стоят буквы 'a',
а между ними одна цифра.
Дана строка:
public class Main {
public static void main(String[] args) {
String txt = "a1a a22a a333a a4444a a55555a aba aca";
}
}
Напишите регулярку, которая найдет строки,
в которых по краям стоят буквы 'a',
а между ними любое количество цифр.
Дана строка:
public class Main {
public static void main(String[] args) {
String txt = "aa a1a a22a a333a a4444a a55555a aba aca";
}
}
Напишите регулярку, которая найдет строки,
в которых по краям стоят буквы 'a',
а между ними любое количество цифр (в том
числе и ноль цифр, то есть строка
'aa').
Дана строка:
public class Main {
public static void main(String[] args) {
String txt = "avb a1b a2b a3b a4b a5b abb acb";
}
}
Напишите регулярку, которая найдет строки
следующего вида: по краям стоят буквы
'a' и 'b', а между ними -
не число и не пробел.
Дана строка:
public class Main {
public static void main(String[] args) {
String txt = "ave a#b a2b a$b a4b a5b a-b acb";
}
}
Напишите регулярку, которая найдет строки
следующего вида: по краям стоят буквы
'a' и 'b', а между ними -
не буква, не цифра и не пробел.
Дана строка:
public class Main {
public static void main(String[] args) {
String txt = "ave a#a a2a a$a a4a a5a a-a aca";
}
}
Напишите регулярку, которая заменит все
пробелы на '!'.