Как исправить следующие RegEx?
У меня есть следующий кусок кода. Я использую модификатор шаблона Case-insensitve, чтобы он мог найти любое вхождение, но я хочу, чтобы замена была именно тем символом, который соответствовал шаблону, сохраняя регистр. Как я мог это исправить?
String str = "Ten tender tEens";
String substr = "te";
str = str.replaceAll("(?i)"+substr, "("+substr+")");
System.out.println( str );
Желаемый результат:(Te) n (te) nder (tE) ens
Полученный результат:(te) n (te) nder (te) ens
3 ответа
Решение
replaceAll()
работать так же, как matcher(string).replaceAll(exp)
: Чтобы сделать это и для лучшего понимания, вы можете взломать код, как:
String str = "Ten tender tEens";
Pattern pattern=Pattern.compile("(?i)(te)");
Matcher matcher=pattern.matcher(str);
System.out.println( matcher.replaceAll("$1"));
Комбинируя эти шаги, вы можете использовать (делает то же самое):
String substr = "te";
str = str.replaceAll("(?i)("+substr+")", "($1)");
Вам нужно использовать группу захвата.
str = str.replaceAll("(?i)("+substr+")", "($1)");
Вы должны использовать
str = str.replaceAll("(?i)("+substr+"?)", "($1)");
Это создаст группу и заменит группу.