Это использует "смотреть за" и "смотреть вперед", чтобы утверждать, но не захватывать, вводить до/после совпадающего (не жадного) регулярного выражения
На всякий случай кто-то задается вопросом, этот ответ отличается от dacwe's: он использует ненужные скобки. Этот ответ более изящный :)
Ответ 2
Вы можете использовать lookaround (положительный lookahead и lookbehind) для этого:
Измените регулярное выражение на: "(?<=<p>)(.*?)(?=</p>)" и все будет в порядке.
Пример:
String str = "<p>this it to be replaced</p>";
System.out.println(str.replaceAll("(?<=<p>)(.*?)(?=</p>)", "replacement"));
Вывод:
<p>replacement</p>
Обратите внимание, что если вы разбираете HTML, вы должны использовать какой-то HTML-парсер, часто регулярные выражения недостаточно хороши...