Команда или в регулярках Java
Команда '|', которая представляет
собой более мощный вариант 'или'
по сравнению с командой [ ]. Данная команда
позволяет разделить регулярку на несколько
частей. При этом искомое может попасть
либо под одну часть регулярки, либо под
другую. Посмотрим на примерах.
В данном примере шаблон поиска такой:
три буквы 'a' или три буквы
'b':
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Main {
public static void main(String[] args) {
String txt = "aaa bbb abb";
Pattern pattern = Pattern.compile("a{3}|b{3}");
Matcher matcher = pattern.matcher(txt);
String res = matcher.replaceAll("!");
System.out.println(res);
}
}
Результат выполнения кода:
"! ! abb"
В данном примере шаблон поиска такой:
три буквы 'a' или от 1 и
более букв 'b':
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Main {
public static void main(String[] args) {
String txt = "aaa bbb bbbb bbbbb axx";
Pattern pattern = Pattern.compile("a{3}|b+");
Matcher matcher = pattern.matcher(txt);
String res = matcher.replaceAll("!");
System.out.println(res);
}
}
Результат выполнения кода:
"! ! ! ! axx"
В данном примере шаблон поиска такой: одна или более буквы или три цифры:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Main {
public static void main(String[] args) {
String txt = "a ab abc 1 12 123";
Pattern pattern = Pattern.compile("[a-z]+|\\d{3}");
Matcher matcher = pattern.matcher(txt);
String res = matcher.replaceAll("!");
System.out.println(res);
}
}
Результат выполнения кода:
"! ! ! 1 12 !"
Вертикальная черта может делить регулярку не на две части, а на любое количество частей:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Main {
public static void main(String[] args) {
String txt = "aaa bbb ccc ddd";
Pattern pattern = Pattern.compile("a+|b+|c+");
Matcher matcher = pattern.matcher(txt);
String res = matcher.replaceAll("!");
System.out.println(res);
}
}
Результат выполнения кода:
"! ! ! ddd"
Если вертикальная черта стоит внутри круглых
скобок, то 'или' работает только
внутри этих скобок.
Для примера давайте найдем строки по
следующему шаблону: в начале стоит или
'a', или 'b' один или более
раз, а потом две буквы 'x':
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Main {
public static void main(String[] args) {
String txt = "axx bxx bbxx exx";
Pattern pattern = Pattern.compile("(a|b+)xx");
Matcher matcher = pattern.matcher(txt);
String res = matcher.replaceAll("!");
System.out.println(res);
}
}
Результат выполнения кода:
"! ! ! exx"
Дана строка:
public class Main {
public static void main(String[] args) {
String txt = "aeeea aeea aea axa axxa axxxa";
}
}
Напишите регулярку, которая найдет строки
по шаблону: по краям стоят буквы
'a', а между ними - или буква
'e' любое количество раз или буква
'x' любое количество раз.
Дана строка:
public class Main {
public static void main(String[] args) {
String txt = "aeeea aeea aea axa axxa axxxa";
}
}
Напишите регулярку, которая найдет строки
по шаблону: по краям стоят буквы
'a', а между ними - или буква
'e' два раза или буква 'x'
любое количество раз.