Java - 由regex替换所有,然后替换第一次出现的字符串

时间:2011-11-11 12:18:27

标签: java regex replace

我的内容包含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>标签;我只想替换与我刚匹配的开头标签相匹配的那个。

3 个答案:

答案 0 :(得分:6)

为什么不在一个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>

答案 1 :(得分:3)

我建议您使用单个正则表达式来匹配整个<span ...>...</span>。捕获一个组中的<span>和另一个组中的</span>,并使用捕获组进行替换。

答案 2 :(得分:1)

您可以尝试提取<span>标记的内容,然后用大括号包装,而不是替换<span>标记。