需求:
现在有一个需求,要把html标签里面包含id的内容都去掉啊,我想大概就是把包含< id =后面的内容去掉格式为:
<(任意1 数字字母)id=任意2
目的:
需要替换上面格式的任意2:为" "同时加上火龙说得这个逻辑:
只有 id 前面是空白字符、分号或者引号时才满足匹配条件,像: 
classid=xxxx; objectid=xxx; 这些都是不能匹配的。 
如:
1.<div id="div1">
结果就是
<div id=" ">2.<input type=text id=text1 value=1>
结果就是
<input type=text id= value=1>
3.<input type="text" id="text2" value="1">
结果就是
<input type="text" id=" " value="1">
也不知道我对这个需求分析的对不对!
反正就是需要把要把html标签里面包含id的内容都去掉啊!
麻烦火龙帮我分析下,能写个正则啊!麻烦了啊!

解决方案 »

  1.   

    可以这样:
    String str = "<input type=\"text\" id=\"text2\" value=\"1\"> " +
    "\r<input type=\"text\"id=\"text2\" value=\"1\"> " +
    "\r<input type='text'id=\"text2\" value=\"1\"> " +
    "\r<input type=\"text\" " +
    "\rid=\" aa\" value=\"1\"> ";
    str = str.replaceAll("(\\s|\r|\"|')id\\s*=\"[^\"]*\"", " id=\" \" ");
    System.out.println(str);
      

  2.   

    忘了一点,忽略大小写,加上(?i)
    String str = "<input type=\"text\" id=\"text2\" value=\"1\"> " +
    "\r<input type=\"text\"id=\"text2\" value=\"1\"> " +
    "\r<input type='text'id=\"text2\" value=\"1\"> " +
    "\r<input type=\"text\" " +
    "\rid=\" aa\" value=\"1\"> ";
    str = str.replaceAll("(\\s|\r|\"|')(?i)Id\\s*=\"[^\"]*\"", " id=\" \" ");
    System.out.println(str);
      

  3.   

    再完善一下,增加单引号匹配
    String str = "<input type=\"text\" id=\"text2\" value=\"1\"> " +
    "\r<input type=\"text\"id =\"text2\" value=\"1\"> " +
    "\r<input type='text'id='text2' value=\'1\'> " +
    "\r<input type=\"text\" " +
    "\rid=\" aa\" value=\"1\"> ";
    str = str.replaceAll("(\\s|\r|\"|')(?i)Id\\s*=([\"'])[^\"]*\\2", " id=\" \" ");
    System.out.println(str);
      

  4.   

    不知道楼主和 kisslan 有什么关系,是不是同一个人啊?这个跟前面你问的那个类似的,最近你问的正则表达式问题也很多,至少能看懂一些了吧?你自己试
    着写写,否则你永远不会得到提高,总不能一碰到了就来问吧?昨天的那个帖子你又提出了新的要求,我感觉实际上是对别人劳动成果的不尊重,这些你在发布帖子
    的时候就能说得很清楚的。那个表达式我昨天花了两个小时,我想我再改的话,你可能会提出其他的
    要求。我也不知道说了多少遍了,再重复一下吧:1,正则表达式是一种模式匹配,是根据字符串的规律来操作的,因此需要详细说明具体要做些什么;
    2,对于查找的问题,详细说明寻找字符串的特征是什么,这些字符串的边界是什么,或者说有些什么规律;
    3,对于替换的问题,详细说明原串是什么,替换后是什么,有些什么规律;
    4,对于验证的问题,详细说明验证的格式是什么;
    5,举两三个覆盖范围尽可能广的示例。需要注意的是,正则表达式仅仅能满足所提供的示例
      

  5.   


    确定一定以及肯定的绝对支持!
    干脆楼主聘请bao110908的了,这样不管啥问题都可以解决了!
      

  6.   

    我感觉回复正则表达式的帖子真的很累,越来越没有啥兴趣了。帖主发布帖子时都是简简单单的几句描述,等到写好了之后,会像增加砝码一样一点一点地提出其他的要求。曾经回复过不断增加砝码的帖子,帖子发布时的内容是这样的:如何才能将语句解析出find kw=a kw1=b kw3=d c lc=e
    a b d c e
    XX=X 可能无限多
    请高手帮忙
    当中穿插的是:String s = "find 字段名1=关键词1 not 字段名2=关键词2 or 字段名3=关键词3 "
    + "xor 关键词4 关键词6 TS=TO 2008-06-11, FR 2007-06-11 and 字段名4=关键词5 关键词7";
    (本想让关键词6变个颜色的,可是UBB不能嵌套,只有再发一遍了,上面的帖还不能自己删除,郁闷)在关键词6处的前面不加(and or not xor)这个语句也是对的,所以也要解析这种情况的
    现在就是如何怎么解析成
    关键词1
    关键词2
    关键词3
    关键词4
    关键词6
    关键词5
    关键词7
    [顺序没要求的],怎么写表达式解析这个结果呀?  先谢谢大家的参与 

    弄到最后的要求是这样的:String s = "find 关键词A 关键词B 字段名1=关键词1 not 字段名2=关键词2 关键词3 or " +
               "字段名3=关键词4 关键词5 关键词6 关键词7 xor 关键词8 关键词9 " +
               "TS=TO 2008-06-11, FR 2007-06-11 " +
               "and 字段名4=关键词10 关键词11 or 关键词12";找到的结果和格式是这样的:关键词A 关键词B
    关键词1
    关键词2 关键词3
    关键词4 关键词5 关键词6 关键词7
    关键词8 关键词9
    关键词10 关键词11
    关键词12
    如果开始不要节省笔墨直接把最为复杂的情况说清楚,那我就不用做其他五六个无用功的回复了,
    两天的时间全耗在那个帖子上了。从那以后凡是问到正则表达式问题的帖子,问题说明少于三行,没有多个示例的帖子就不看了,
    因为这种帖子我估计写了等于白写,因为每个人的理解能力都不是一样的,我的理解跟楼主的
    理解,如果没有足够的文字描述的话,肯定是要重新写过的。
      

  7.   

    哦!sorry!不过这个写的还是比较清楚吧!而且例子够多吧?http://topic.csdn.net/u/20081127/01/c11dbed3-f811-49a9-ac80-d0967b2df907.html引用 48 楼 bao110908 的回复:
    为了避免把 background-color: #ffffff; 这种样子的替换掉的话,可以改成: 
    Java code        String regex = "(?i)((?: <[^>\\s]+[^>]+?style\\s*=\\s*\"|\\G)[^\">]*?)" + 
                    "\\s*(? <=[\\s;\"])(?:font-size|color)\\s*:[^;]*;\\s*"; 
    只有 font-size 或 color 前面是空白字符、分号或者引号时才满足匹配条件,像: aaafont-size: xxxx;、background-color: red; 这些都是不能匹配的。 呵呵… 
     果然很厉害啊...能不能修改一点 
    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的代码测试也没什么问题啊 
      

  8.   

    那个还没结贴 这个又来一个呵呵 我又打一遍酱油又见火龙果大牛 激动ing