需求:
格式为
<(任意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.   

    如果正则做不到
    目的: 
    需要替换上面格式的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> 
      

  2.   

    LZ的意思是不是在标记中只要出现color属性或者font-size属性,都要设置为""~其他的属性不变?package Test;
    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));
    }
    }
      

  3.   

    String input="<p style=\"Color:#FF0000;FONT-size:100px;font-family:黑体;\"> ";
    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']}"(虽然几率不高)~
    别的可能出现的情况还米想到 =.=!
      

  4.   

    果子最近应该很忙不是据说javaEye上有很多高手吗? 在那里问不到结果吗? 不会吧
      

  5.   

    玩了一下,还是可以跑的。 String str = "<p style=\"font-family:黑体;Color:#FF0000;font-family:黑体;Font-Size:100px;font-family:黑体;\">";
    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:黑体;">
      

  6.   


    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 ....
    }
    }
      

  7.   


    str = str.replaceAll("(<[a-z].*style.*=.*\".*)color.*;(.*:.*\")", "$1$2");喵~``
      

  8.   

    抱歉,看漏要求了喵~``str = str.replaceAll("(<[a-z].*style.*=.*\".*)color[^;]*;|font\\-size[^;]*;", "$1");
      

  9.   

    不会正则, indexOf, lastIndex,subString,replace 照样可以解决问题
      

  10.   

    sorry,俺是用python的,不懂java,不过说真的,用正则表达式写那个太容易了,用正则表达式1个月以上闭着眼睛都搞得了了
      

  11.   

    说简单一点,是不是就是要把 style 中的 color:xxxx; 和 font-size:xxxx; 都去掉?
      

  12.   

    public class Test {    public static void main(String[] args) {
            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。
      

  13.   

    我测试用的 JDK 版本是 1.6.0_10-b33
      

  14.   

    为了避免把 background-color: #ffffff; 这种样子的替换掉的话,可以改成:        String regex = "(?i)((?:<[^>\\s]+[^>]+?style\\s*=\\s*\"|\\G)[^\">]*?)" +
                    "\\s*(?<=[\\s;\"])(?:font-size|color)\\s*:[^;]*;\\s*";只有 font-size 或 color 前面是空白字符、分号或者引号时才满足匹配条件,像:aaafont-size: xxxx;、background-color: red; 这些都是不能匹配的。呵呵,正则表达式需要根据不同的要求逐渐地进行完善的。
      

  15.   

    如果由于其他的原因不能使用 JDK 6,可以试试下面的表达式        String regex = "(?<=<[^>\\s]{1,100}[^>]{1,100}?style\\s{0,100}=\\s{0,100}\"[^\"]{0,100}?)" +
                    "\\s*(?<=[\\s;\"])(?:color|font-size):[^;]*;\\s*";由于效率的原因,JDK 中的逆序环视限定了最大的字符数,现在给的是 100,可以根据实际需要进行调整。不建议采这种方式,这种方式效率比较低下。
      

  16.   


    果然很厉害啊...能不能修改一点
    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的代码测试也没什么问题啊