簡體   English   中英

通過與Java中的正則表達式匹配來替換字符串

[英]Replace string by matching with the regular expressions in Java

這里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");
            }

上面的代碼有什么問題。 因為我在trimUrl中獲得了相同的monitorUrl值。

嘗試使用replaceAll而不是替換(並像Alan指出的那樣逃避點):

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

從文檔:

replaceAll

 public String replaceAll(String regex, String replacement) 

將給定替換的給定正則表達式匹配的此字符串的每個子字符串替換。


注意:您可能還想在/之后考慮匹配,並通過在正則表達式的末尾使用$檢查它是否在行的末尾。

我想這就是你要找的東西:

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

說明:

  1. replaceAll()將第一個參數視為正則表達式,而replace()將其視為文字字符串。

  2. 您使用括號而不是方括號來分組。 (?:...)是群體的非捕捉形式; 你應該使用捕捉形式 - (...) - 只有當你真的需要捕捉某些東西時。

  3. . 是一個元字符,所以如果你想匹配一個文字點,你需要轉義它。

最后,您不必單獨檢查是否存在哨兵字符串; 如果它不存在, replaceAll()只返回原始字符串。 就此而言, replace() ; 你也可以這樣做:

trimUrl = monitorUrl.replace("stats.jsp", "ping")
                    .replace("monitor.jsp", "ping");

不需要使用正則表達式(也replace()不使用正則表達式)。

trimUrl = monitorUrl.replace("stats.jsp", "ping").replace("monitor.jsp", "ping");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM