[英]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");
說明:
replaceAll()
將第一個參數視為正則表達式,而replace()
將其視為文字字符串。
您使用括號而不是方括號來分組。 (?:...)
是群體的非捕捉形式; 你應該使用捕捉形式 - (...)
- 只有當你真的需要捕捉某些東西時。
.
是一個元字符,所以如果你想匹配一個文字點,你需要轉義它。
最后,您不必單獨檢查是否存在哨兵字符串; 如果它不存在, 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.