Java Regex для замены подстроки

1
String expression = "${abcd?string(datePattern)}\" href=\"\">From Date</a>&nbsp;-&nbsp;${dasfsaf?string(datePattern)}\" href=\"\">To Date</a>";
expression=expression.replaceAll("(})(\".+</a>)(.+?)", "$1$3");
System.out.println(expression);

Выходной результат:

${abcd?string(datePattern)}&nbsp;-&nbsp;${dasfsaf?string(datePattern)}" href="">To Date</a>

Ожидаемый результат:

${abcd?string(datePattern)}&nbsp;-&nbsp;${dasfsafT?string(datePattern)}

Проблема в том, что это только замена содержимого между первым { и </a> а не после него. Я хочу, чтобы все содержимое было заменено между этими двумя.

Теги:

2 ответа

1

в вашем регулярном выражении вам нужно что-то после </a> как у вас есть (.+?) вы можете изменить это на (.*?) и оно должно работать, поскольку вы больше не требуете, чтобы после этого ничего не было, а ваш вторая часть может соответствовать (в качестве альтернативы она не имеет никакой роли, поэтому я просто удалю ее). Кроме того, вы, вероятно, не хотите, чтобы жадный квантификатор посередине .+ Так измените это на ленивый .+?

expression=expression.replaceAll("(})(\".+?</a>)", "$1");
-1

Не точный ответ регулярного выражения, но вы можете просто повторить вызов replaceAll. Это то, что я делаю, когда у меня нет времени, и если это не будет дорого.

  • 0
    регулярное выражение не будет совпадать во второй раз, оно требует, чтобы что-то присутствовало после финала </a> или не будет совпадать.
  • 0
    Выход был на один повтор больше, чем ожидалось в конце. Таким образом, @ user3678399 удалось заменить один посередине, но не тот, что в конце. Я уже сказал, что это не был точный ответ. Иногда мне нужен срочный ответ, и когда дело доходит до таких сложных фраз регулярных выражений, вам может понадобиться увидеть мнения. Вот почему так много вопросов по различным регулярным выражениям. И я хотел предложить эту идею.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню