Несохраняющие скобки в Java
Обычные круглые скобки в шаблоне одновременно
группируют часть выражения и создают группу,
к которой потом можно обратиться через
group(n). Если нужна только группировка,
используют несохраняющие скобки (?:...):
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Main {
public static void main(String[] args) {
String txt = "abab123";
Pattern pattern = Pattern.compile("(ab)+([1-9]+)");
Matcher matcher = pattern.matcher(txt);
if (matcher.find()) {
System.out.println(matcher.groupCount());
System.out.println(matcher.group(1));
System.out.println(matcher.group(2));
}
}
}
Здесь group(1) содержит повторяющуюся часть
"ab", а group(2) - число. Если первая
пара скобок нужна только для повторения, ее
заменяют на (?:ab)+:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Main {
public static void main(String[] args) {
String txt = "abab123";
Pattern pattern = Pattern.compile("(?:ab)+([1-9]+)");
Matcher matcher = pattern.matcher(txt);
if (matcher.find()) {
System.out.println(matcher.groupCount());
System.out.println(matcher.group(1));
}
}
}
После замены остается одна группа с числом. Несохраняющие скобки удобны, когда повторение или альтернатива нужны в шаблоне, но отдельная группа для этой части не требуется.
Дана строка:
String txt = "xyxy12";
Сделайте шаблон, который найдет повторяющуюся
часть "xy" и число после нее, но сохранит
в группе только число.