簡體   English   中英

正則表達式:將匹配的文本替換為傳遞給它的方法的輸出

[英]regex: replace matched text with output of method it's passed to

我有一個標記為這樣的文本文件:

Old McDonald had a <:farm/101:>

當通過此文本文件讀取的程序訪問此標記時,它會將farm/101傳遞給將標記轉換為適當的HTML代碼的方法,具體取決於傳遞的標記類型。 在這種情況下,單詞farm需要轉換為超鏈接,其中101為HREF。 這是在parseTag()方法中完成的,調用方法如下:

Pattern pattern = Pattern.compile("<:(.+?):>");        
Matcher tagMatch = pattern.matcher(in);

while (tagMatch.find()) {
    String parsed = parseTag(tagMatch.group(1);
    // replace tagMatch.group(0) with parsed
}

然后我想用該方法的輸出替換整個標記。 我想過做的事情:

Pattern pattern = Pattern.compile("<:");    
String split = pattern.split(in);    
StringBuilder sb = new StringBuilder();
for (int i = 0; i < split.length; i++){
    if (i%2 == 0) sb.append(split[i]);
    else sb.append(parseTag(split[i]);
} 
String final = sb.toString();

final在這里會給我我想要的東西,但這看起來很亂......

您可以使用Matcher實例中的appendReplacementappendTail方法。

嘗試

StringBuffer sb= new StringBuffer();
while (tagMatch.find()) {
    //this will add text to buffer with replaced matched part
    tagMatch.appendReplacement(sb, parseTag(tagMatch.group(1)));
}
tagMatch.appendTail(sb);//to add rest of input after last replacement

String result = sb.toString();
System.out.println(result);

暫無
暫無

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

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