String expression = "${abcd?string(datePattern)}\" href=\"\">From Date</a> - ${dasfsaf?string(datePattern)}\" href=\"\">To Date</a>";
expression=expression.replaceAll("(})(\".+</a>)(.+?)", "$1$3");
System.out.println(expression);
Выходной результат:
${abcd?string(datePattern)} - ${dasfsaf?string(datePattern)}" href="">To Date</a>
Ожидаемый результат:
${abcd?string(datePattern)} - ${dasfsafT?string(datePattern)}
Проблема в том, что это только замена содержимого между первым {
и </a>
а не после него. Я хочу, чтобы все содержимое было заменено между этими двумя.
в вашем регулярном выражении вам нужно что-то после </a>
как у вас есть (.+?)
вы можете изменить это на (.*?)
и оно должно работать, поскольку вы больше не требуете, чтобы после этого ничего не было, а ваш вторая часть может соответствовать (в качестве альтернативы она не имеет никакой роли, поэтому я просто удалю ее). Кроме того, вы, вероятно, не хотите, чтобы жадный квантификатор посередине .+
Так измените это на ленивый .+?
expression=expression.replaceAll("(})(\".+?</a>)", "$1");
Не точный ответ регулярного выражения, но вы можете просто повторить вызов replaceAll. Это то, что я делаю, когда у меня нет времени, и если это не будет дорого.
</a>
или не будет совпадать.