Заменить строку, сопоставив ее с регулярными выражениями в Java - PullRequest
3 голосов
/ 12 ноября 2011

здесь monitorUrl содержит- http://host:8810/solr/admin/stats.jsp
, а иногда monitorUrl может быть-- http://host:8810/solr/admin/monitor.jsp

Поэтому я хочу заменить stats.jsp и monitor.jsp на ping

if(monitorUrl.contains("stats.jsp") || monitorUrl.contains("monitor.jsp")) {
                trimUrl = monitorUrl.replace("[stats|monitor].jsp", "ping");
            }

Что-то не так с кодом выше.Как я получаю то же значение monitorUrl в trimUrl.

Ответы [ 3 ]

4 голосов
/ 12 ноября 2011

Попробуйте использовать replaceAll вместо замены (и экранируйте точку, как указал Алан):

trimUrl = monitorUrl.replaceAll("(stats|monitor)\\.jsp", "ping");

Из документации:

replaceAll

public String replaceAll(String regex, String replacement)

Заменяет каждую подстроку этой строки, которая соответствует данному регулярному выражению, с данной заменой.


Примечание: Вы также можете рассмотреть возможность сопоставления только после / и проверки его на конец строки, используя $ в конце вашего регулярного выражения.

3 голосов
/ 12 ноября 2011

Я думаю, это то, что вы ищете:

trimUrl = monitorUrl.replaceAll("(?:stats|monitor)\\.jsp", "ping");

Объяснение:

  1. replaceAll() трактует первый аргумент как регулярное выражение, тогда как replace() обрабатывает это как буквальную строку.

  2. Вы используете круглые скобки, а не квадратные скобки, чтобы сгруппировать вещи.(?:...) является не захватывающей формой группы;Вы должны использовать форму захвата - (...) - только тогда, когда вам действительно нужно захватить что-то.

  3. . - метасимвол, поэтому вам нужно экранировать его, если вы хотите сопоставитьбуквальная точка.

И, наконец, вам не нужно отдельно проверять наличие строки часового;если его там нет, replaceAll() просто возвращает исходную строку.В этом отношении, так же replace();Вы могли бы также сделать это:

trimUrl = monitorUrl.replace("stats.jsp", "ping")
                    .replace("monitor.jsp", "ping");
1 голос
/ 12 ноября 2011

Нет необходимости использовать регулярные выражения (также replace() не используйте регулярные выражения).

trimUrl = monitorUrl.replace("stats.jsp", "ping").replace("monitor.jsp", "ping");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...