需求:
格式为
<(任意1 a-z)任意2style任意3=任意4"任意5color或font-size任意6;任意7:任意8"
即:
<[加](任意1 a-z)[加]任意2[加]style[加]任意3[加]=[加]任意4
[加]"[加]任意5[加]color或font-size[加]任意6[加];[加]任意7[加]:[加]任意8[加]"目的:
需要替换上面格式的color或font-size[加]任意6[加];[加]任意7[加]:为""例1:
<p style="color:#FF0000;font-size:100px;font-family:黑体;">
测试2
</p>结果为:
<p style="font-family:黑体;">
测试1
</p>例2:
<p style="color:#FF0000;">
测试1
</p>结果为:
<p style="">
测试1
</p>
格式为
<(任意1 a-z)任意2style任意3=任意4"任意5color或font-size任意6;任意7:任意8"
即:
<[加](任意1 a-z)[加]任意2[加]style[加]任意3[加]=[加]任意4
[加]"[加]任意5[加]color或font-size[加]任意6[加];[加]任意7[加]:[加]任意8[加]"目的:
需要替换上面格式的color或font-size[加]任意6[加];[加]任意7[加]:为""例1:
<p style="color:#FF0000;font-size:100px;font-family:黑体;">
测试2
</p>结果为:
<p style="font-family:黑体;">
测试1
</p>例2:
<p style="color:#FF0000;">
测试1
</p>结果为:
<p style="">
测试1
</p>
目的:
需要替换上面格式的color或font-size[加]任意6[加];[加]任意7[加]:为""
把color和font-size变为""也可以!
即:
例1:
<p style="color:#FF0000;font-size:100px;font-family:黑体;">
测试2
</p> 结果为:
<p style=":#FF0000;:100px;font-family:黑体;">
测试1
</p> 例2:
<p style="color:#FF0000;">
测试1
</p> 结果为:
<p style=":#FF0000;">
测试1
</p>
import java.util.regex.*;
public class qdb {
public static String f(String input,String regex)
{
Pattern p=Pattern.compile(regex);
Matcher m=p.matcher(input);
StringBuffer sb=new StringBuffer();
while(m.find())
{
m.appendReplacement(sb,"");//将匹配到的字符串置为""
}
m.appendTail(sb);
return sb.toString();
}
public static void main(String[] args)
{
String input="<p style=\"Color:#FF0000;font-size:100px;font-family:黑体;\"> ";
String input1="<p style=\"color:#FF0000;\"> ";
String regex="(?i)(color)|(font-size)";//单纯匹配color与font-size这2个属性,并且忽略其大小写
System.out.println(f(input,regex));
System.out.println(f(input1,regex));
}
}
String input1="<p style=\"background-color:#FF0000; color:#00FF00\"> ";
String input2="<p style=\"color:${sessionScope.color};background-color:${color};\">";
String input3="<p style=\"font-XXX:${pageScope['font-size']} font-size:10px\">";
String regex="(?i)([^-]color)(?=:)|(font-size)(?=:)";
更改下,以避免更改属性"background-color"以及属性中可能出现的EL表达式
"${color}"或"${XXXScope['font-size']}"(虽然几率不高)~
别的可能出现的情况还米想到 =.=!
Pattern p = Pattern.compile("(.*?)(<p.*style.*?>)");
Matcher m = p.matcher(str); String rtn = "";
while (m.find()) {
rtn += m.group(1)
+ m.group(2).replaceAll("(?i)color:#\\w{6};", "").replaceAll(
"(?i)font-size:\\d*px;", "");
}
System.out.println(rtn);
// 结果 <p style="font-family:黑体;font-family:黑体;font-family:黑体;">
import java.util.regex.Matcher;
import java.util.regex.Pattern;public class StrTest {
public static void main(String[] args) { String str = "html tag... <p descrabtion....and so on Style=\"Color:#FF0000;font-family:"
+ "黑体;Font-Size:100px;\"><br>测试</p>html tag ....";
Pattern p = Pattern.compile("(.*)(<p.*(?i)style.*?>)(.*)");
Matcher m = p.matcher(str); String rtn = "";
while (m.find()) {
rtn += m.group(1)
+ m.group(2).replaceAll(
"(?i)color:#\\w{6};|(?i)font-size:\\d*px;", "")
+ m.group(3);
}
System.out.println(rtn); // 结果 html tag... <p descrabtion....and so on style="font-family:黑体;"><br>测试</p>html tag ....
}
}
str = str.replaceAll("(<[a-z].*style.*=.*\".*)color.*;(.*:.*\")", "$1$2");喵~``
String str =
"<p style=\"font-size:100px;color:#FF0000;font-family:黑体;color: red;\">\n" +
"测试2\n" +
"</p>\n" +
"<p style=\"font-size:100px;color:#FF0000; font-size:100px;\">\n" +
"测试1\n" +
"</p>\"color:#FF0000;\"";
String regex = "(?i)((?:<[^>\\s]+[^>]+?style\\s*=\\s*\"|\\G)[^\">]*?)" +
"\\s*(?:font-size|color):[^;]*;\\s*";
str = str.replaceAll(regex, "$1");
System.out.println(str);
}
}建议使用 JDK 6 或以上的版本,低于 JDK 6 的版本中 \G 有 bug 可能会运行不正常,
JDK 1.4 和 JDK 5 中的正则表达式引擎有很多的 bug。
"\\s*(?<=[\\s;\"])(?:font-size|color)\\s*:[^;]*;\\s*";只有 font-size 或 color 前面是空白字符、分号或者引号时才满足匹配条件,像:aaafont-size: xxxx;、background-color: red; 这些都是不能匹配的。呵呵,正则表达式需要根据不同的要求逐渐地进行完善的。
"\\s*(?<=[\\s;\"])(?:color|font-size):[^;]*;\\s*";由于效率的原因,JDK 中的逆序环视限定了最大的字符数,现在给的是 100,可以根据实际需要进行调整。不建议采这种方式,这种方式效率比较低下。
果然很厉害啊...能不能修改一点
1.<(任意1 a-z)任意2style任意3=任意4"任意5color或font-size任意6;任意7:任意8"
改为
<(任意1 字母和数字)任意2style任意3=任意4"任意5color或font-size任意6;任意7:任意8"
2.目的:
需要替换上面格式的color或font-size[加]任意6[加];[加]任意7[加]:为""
改为:
需要替换上面格式的color或font-size[加]任意6[加];[加]任意7[加]:为" " 3.我们用的是jdk1.5
是不是只能用
String regex = "(?<=<[^>\\s]{1,100}[^>]{1,100}?style\\s{0,100}=\\s{0,100}\"[^\"]{0,100}?)" +
"\\s*(?<=[\\s;\"])(?:color|font-size):[^;]*;\\s*";
这种方式啊?因为我用您说的jdk1.6的代码测试也没什么问题啊