日期:2014-05-17  浏览次数:20772 次

大虾帮助看下,这个java正则表达式哪里写错了?
先看代码:

public static void main(String[] args){
String str = "ab<style type=\"text/css\" > .?[]cd*{ss}\r\n body {ef}gh{} body , table{ij} kl</style>mn";
String reg = "<style[\\s][\\s\\S]*?>[\\s\\S]*?([\\s][b][o][d][y][\\s\\S]*?\\{[\\s\\S]*?\\})|([b][o][d][y][\\s]*?,)[\\s\\S]*?<\\/[s][t][y][l][e]>";
System.out.println("替换结果:"+str.replaceAll(reg, ""));//值为:abgh{} mn,不是我想要的
}

先简单说明下:
我想实现的功能是找出字符串中位于<style>标签类的body{...}与body, 并把这两个用空串代替。
实例代码中,我想要的替换结果是:

"ab<style type=\"text/css\" > .?[]cd*{ss}\r\n gh{}  table{ij} kl</style>mn"
即把:
"ab<style type=\"text/css\" > .?[]cd*{ss}\r\n body {ef}gh body , table{ij} kl</style>mn";
红色部分替掉。
为避免复杂起见,约定str字符只有一对<style>标签,body前后只允许为空格或,{ 即取body后逗号为止和取body后第一对{}为止,用""代替换
上文应该说得比较清楚了,本人正则运用不熟,请大虾指教,谢了
------解决方案--------------------

String str = "ab<style type=\"text/css\" > .?[]cd*{ss}\r\n body {ef}gh{} body , table{ij} kl</style>mn";
String regex = "body \\{ef\\}gh\\{\\} body";
str = str.replaceAll(regex, "gh{}");
System.out.println(str);





偷懒的不知道行不行呀。。
呵呵。。。我在继续想。。。等会还会恢复。
------解决方案--------------------

String regex = "body
------解决方案--------------------
\\{ef\\}";





这个貌似也行。。。