>>31
とりあえず、要素名と属性名を小文字に。

String html = "<BODY BGCOLOR=\"WHITE\" LINK=\"#00000\">";
html = html + html;

Pattern p1 = Pattern.compile("<([^<>]*)>");
Pattern p2 = Pattern.compile("\\b(\\w+)(=\"[^\"]*\")?");
Matcher m1 = p1.matcher(html);
StringBuffer sb1 = new StringBuffer();
while (m1.find()) {
 Matcher m2 = p2.matcher(m1.group(1));
 StringBuffer sb2 = new StringBuffer();
 while (m2.find()) {
  m2.appendReplacement(sb2, m2.group(1).toLowerCase() + "$2");
 }
 m2.appendTail(sb2);
 sb2.insert(0, "<");
 sb2.append(">");
 m1.appendReplacement(sb1, new String(sb2));
}
m1.appendTail(sb1);

もっとうまくすれば二重ループにしなくてもいけるかもしれん