[英]Replace regex pattern to lowercase in java
我正在嘗試將 url 字符串替換為小寫,但希望保持特定模式字符串的原樣。
例如:對於輸入,如:
http://BLABLABLA?qUERY=sth¯o1=${MACRO_STR1}¯o2=${macro_str2}
預期的輸出將是小寫的 url 但多個宏是原始的:
http://blablabla?query=sth¯o1=${MACRO_STR1}¯o2=${macro_str2}
我試圖使用正則表達式捕獲字符串,但沒有找到進行替換的正確方法。 此外,似乎使用 replaceAll() 不能完成這項工作。 請問有什么提示嗎?
看起來您想將${...}
內的所有大寫字符更改為小寫形式。
與構造
Matcher matcher = ...
StringBuffer buffer = new StringBuffer();
while (matcher.find()){
String matchedPart = ...
...
matcher.appendReplacement(buffer, replacement);
}
matcher.appendTail(buffer);
String result = buffer.toString();
或者從Java 9開始,我們可以使用Matcher#replaceAll(Function<MatchResult,String> replacer)
並將其重寫為
String replaced = matcher.replaceAll(m -> {
String matchedPart = m.group();
...
return replacement;
});
您可以基於matchedPart
動態構建replacement
。
因此,您可以讓您的正則表達式首先嘗試匹配${...}
,然后再進行匹配(當${..}
不匹配時,因為不會在其之前放置正則表達式光標),讓它匹配[AZ]
。 在遍歷匹配項時,如果要使用use替代其小寫形式或原始形式,則可以根據匹配結果(例如其長度或是否以$
開頭)進行決定。
BTW正則表達式引擎允許我們將replacement
零件$x
(其中x
是組ID)或${name}
(其中name
稱為group)放置在replacement
零件中,以便我們可以重復使用那些匹配的零件。 但是,如果我們想將${..}
作為文字替換,則需要轉義\\$
。 Matcher.quoteReplacement
手動進行操作,我們可以使用Matcher.quoteReplacement
。
演示:
String yourUrlString = "http://BLABLABLA?qUERY=sth¯o1=${MACRO_STR1}¯o2=${macro_str2}";
Pattern p = Pattern.compile("\\$\\{[^}]+\\}|[A-Z]");
Matcher m = p.matcher(yourUrlString);
StringBuffer sb = new StringBuffer();
while(m.find()){
String match = m.group();
if (match.length() == 1){
m.appendReplacement(sb, match.toLowerCase());
} else {
m.appendReplacement(sb, Matcher.quoteReplacement(match));
}
}
m.appendTail(sb);
String replaced = sb.toString();
System.out.println(replaced);
或在Java 9中
String replaced = Pattern.compile("\\$\\{[^}]+\\}|[A-Z]")
.matcher(yourUrlString)
.replaceAll(m -> {
String match = m.group();
if (match.length() == 1)
return match.toLowerCase();
else
return Matcher.quoteReplacement(match);
});
System.out.println(replaced);
輸出: http://blablabla?query=sth¯o1=${MACRO_STR1}¯o2=${macro_str2}
一樣簡單,這需要一些編碼。 將整個url分成幾部分,直到marcos並降低字符串1變量,並將所有其他restg宏字符串附加到該變量。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.