Попробуйте это:
Pattern pattern = Pattern.compile("<h3>(.*)<\\/h3>");
Matcher matcher = pattern.matcher("<h3>Basic Information</h3> <div>");
matcher.find();
StringBuffer sb = new StringBuffer();
matcher.appendReplacement(sb,"$1");
String result = sb.toString();
Причина, почему вы не можете сделать это только с replaceFirst это потому, что метод appendTail
вызывается в конце метода replaceFirst
. Матчи заменят группы, которые вы не указали с пустым, группы, которые вы указали с их значением и, конечно, несогласованные биты, которые, так как для них не было найдено совпадений, они не заменяются на все.
В случае Вашего запроса:
группы 0: <h3>
группа 1: Базовая информация
группа 0: </h3 >
non-match: <div>
Это всего лишь общий пример того, что вы можете сделать с помощью шлемов. Конечно, если вы просто хотите, чтобы группа была специфической ... Ну, просто используйте:
Я не понимаю, почему вы ожидаете получить только * «Базовая информация» * в результате с помощью этого кода. Вы уверены, что 'replaceAll' действительно то, что вы хотите? Возможно, вам скорее нужно извлечь спичку вместо ее замены. –