簡體   English   中英

Java-用正則表達式替換全部,然后替換第一次出現的字符串

[英]Java - replaceAll by regex, then replace first occurance of string

我的字符串里面帶有HTML: <span title="whatever">something I want to preserve</span>...

我正在使用正則表達式將<span title="whatever">替換為( ,然后將以下</span>替換為)

Pattern regex = Pattern.compile("<span\\s+[^>]*title=(['\"])(.*?)\\1[^>]*>");
Matcher matcher = regex.matcher(strLine);
if (matcher.find()) {
    strLine = matcher.replaceAll("(");
    strLine = strLine.replace("</span>", ")");
}

我可以用,但是它替換了所有</span>標簽; 我只想替換與剛匹配的開始標簽匹配的標簽。

為什么不在一個replaceAll(...)調用中這樣做:

String s = "noise <span title=\"whatever\">something I want to preserve</span>...";
s = s.replaceAll("<span\\s+[^>]*title=(['\"])(.*?)\\1[^>]*>(.*?)</span>", "($3)");
System.out.println(s);

它將打印:

noise (something I want to preserve)...

編輯

請注意我的回答下的Alan評論:這假設您在輸入中沒有嵌套<span>

我建議您使用單個正則表達式來匹配整個<span ...>...</span> 在一個組中捕獲<span>在另一組中捕獲</span> ,然后使用捕獲組進行替換。

代替替換<span>標簽,您可以嘗試提取<span>標簽的內容,然后用花括號將其包裝。

暫無
暫無

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

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