求一个正则表达式(

al_you_ge 2008-06-30 09:34:20
目前我要做一个符合XML标准的网站,需要把不符合XML标准的字符转换为符合XML标准的字符,
目前在<img >这里有点小问题,
我需要这样的<img src=""/>的样式 而我需要处理的<img >标记里面带有大量的不合法的属性
例如<img width=120 height=100 src="http://www.dl.gov.cn/atodl/intro/images/yp.jpg" >我需要的是<img src="http://www.dl.gov.cn/atodl/intro/images/yp.jpg" />这样的
...全文
507 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
djlijian 2009-08-26
  • 打赏
  • 举报
回复
各位大侠,本人正是个菜鸟,希望学习:

我想把<img src="2.jpg"> 换成<img src="/upload/2.jpg"> 正则表达式怎么写呢?
al_you_ge 2008-06-30
  • 打赏
  • 举报
回复
public static void do6(){
String str="<img width=120 height=100 src=\"http://www.dl.gov.cn/atodl/intro/images/yp.jpg\">";
str=str.replaceAll("<img .*? src=\"([^\"]+)\">", "<img src=\"$1\"/>");
System.out.println(str);
str="<img src=\"http://www.dl.gov.cn/atodl/intro/images/yp.jpg\" width=120 height=100 >";
str=str.replaceAll("<img .*?src=\"([^\"]+)\"[^>]*>","<img src=\"$1\"/>");
System.out.println(str);
}

问题解决啦!!!
哈哈 感谢各位牛人帮忙!!
马上结贴
xchh1220 2008-06-30
  • 打赏
  • 举报
回复
var str = "<img width=120 height=100 src=\"http://www.dl.gov.cn/atodl/intro/images/yp.jpg\"><p><img src=\"http://sss\"/></p>";
var reg = /<img .*?src=(.*?)>/ig;
str = str.replace(reg, "<img $1/>").replace(/\/\//g," /");
alert(str);
rascalboy520 2008-06-30
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 al_you_ge 的回复:]
引用 7 楼 rascalboy520 的回复:
Java code
public static void do6(){
String str=" <img width=120 height=100 src=\"http://www.dl.gov.cn/atodl/intro/images/yp.jpg\">";
str=str.replaceAll(" <img .*? src=", " <img src=");
System.out.println(str);
}

如果 <img src=\"http://www.dl.gov.cn/atodl/intro/images/yp.jpg\" width=120 height=100 >呢?
而且没关闭…
[/Quote]
这样的把正则后面部分改一下就可以了,

public static void do6(){
String str="<img width=120 height=100 src=\"http://www.dl.gov.cn/atodl/intro/images/yp.jpg\">";
str=str.replaceAll("<img .*? src=\"([^\"]+)\">", "<img src=\"$1\"/>");
System.out.println(str);
str="<img src=\"http://www.dl.gov.cn/atodl/intro/images/yp.jpg\" width=120 height=100 >";
str=str.replaceAll("<img .*?src=\"([^\"]+)\"[^>]*>","<img src=\"$1\"/>");
System.out.println(str);
}
sd5816690 2008-06-30
  • 打赏
  • 举报
回复
10楼的问题,加上红色部分就行了
<img.*?src=\"([^\"]+)\".*?>
sd5816690 2008-06-30
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 rascalboy520 的回复:]
恩,对,$n 表示前面匹配的group(n);
[/Quote]
哦,谢谢了,为保留原字符串,困惑了很久
rascalboy520 2008-06-30
  • 打赏
  • 举报
回复
恩,对,$n 表示前面匹配的group(n);
sd5816690 2008-06-30
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 rascalboy520 的回复:]
不好意思,没有注意到后面的那个/,这个可以了,

Java code
public static void do6(){
String str="<img width=120 height=100 src=\"http://www.dl.gov.cn/atodl/intro/images/yp.jpg\">";
str=str.replaceAll("<img .*? src=\"([^\"]+)\">", "<img src=\"$1\"/>");
System.out.println(str);
}
[/Quote]
果然是高人!
问一下 $1 是保留原来字符串的意思吗?
al_you_ge 2008-06-30
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 rascalboy520 的回复:]
Java code
public static void do6(){
String str="<img width=120 height=100 src=\"http://www.dl.gov.cn/atodl/intro/images/yp.jpg\">";
str=str.replaceAll("<img .*? src=", "<img src=");
System.out.println(str);
}
[/Quote]
如果<img src=\"http://www.dl.gov.cn/atodl/intro/images/yp.jpg\" width=120 height=100 >呢?
而且没关闭标签
rascalboy520 2008-06-30
  • 打赏
  • 举报
回复
不好意思,没有注意到后面的那个/,这个可以了,

public static void do6(){
String str="<img width=120 height=100 src=\"http://www.dl.gov.cn/atodl/intro/images/yp.jpg\">";
str=str.replaceAll("<img .*? src=\"([^\"]+)\">", "<img src=\"$1\"/>");
System.out.println(str);
}
al_you_ge 2008-06-30
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 rascalboy520 的回复:]
Java code
public static void do6(){
String str="<img width=120 height=100 src=\"http://www.dl.gov.cn/atodl/intro/images/yp.jpg\">";
str=str.replaceAll("<img .*? src=", "<img src=");
System.out.println(str);
}
[/Quote]
还有可能是没封闭的标签啊 > 怎么处理,只能处理<img 里的 不能处理别的标记里的
rascalboy520 2008-06-30
  • 打赏
  • 举报
回复

public static void do6(){
String str="<img width=120 height=100 src=\"http://www.dl.gov.cn/atodl/intro/images/yp.jpg\">";
str=str.replaceAll("<img .*? src=", "<img src=");
System.out.println(str);
}
sd5816690 2008-06-30
  • 打赏
  • 举报
回复
这样可以达到目标,不过麻烦了一点,不知道能不能通过正则一次完成

<script language=JavaScript>
var req = /img.*?src=/g;
var str = "<img width=120 height=100 src=\"http://www.dl.gov.cn/atodl/intro/images/yp.jpg\" ><p></p>";
var arr = str.split("<");
str = "";
for(var i=0; i < arr.length;i++){
//只替换img标签
if(arr[i].indexOf("img") == 0){
str += "<" + arr[i].replace(req,"img src=").replace(/>/g,"/>").replace(/\/\/>/g,"/>");
}else{
str += "<" + arr[i];
}
}
alert(str.substring(1));
</script>
sd5816690 2008-06-30
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 al_you_ge 的回复:]
//2、替换>为/>

第二步怎么实现?
里面不可能只有img标记的,好可能有 <p>标记的,会不会把 <p>的也给替换掉啊
[/Quote]
会把<p>替换掉,我只考虑了<img>标签
al_you_ge 2008-06-30
  • 打赏
  • 举报
回复
//2、替换>为/>

第二步怎么实现?
里面不可能只有img标记的,好可能有<p>标记的,会不会把<p>的也给替换掉啊
sd5816690 2008-06-30
  • 打赏
  • 举报
回复
我能力不足,要替换3次才能达到效果,等大大们来

<script language=JavaScript>
var req = /<img.*?src=/g;
var str = "<img width=120 height=100 src=\"http://www.dl.gov.cn/atodl/intro/images/yp.jpg\" ><img width=120 height=100 src=\"http://www.dl.gov.cn/atodl/intro/images/yp.jpg\" >";
//1、替换<img....src为<img src
//2、替换>为/>
//3、上面的2可能把符合规范的替换为//>,所以现在替换//>为/>
str = str.replace(req,"<img src=").replace(/>/g,"/>").replace(/\/\/>/g,"/>");
alert(str);
</script>
al_you_ge 2008-06-30
  • 打赏
  • 举报
回复
标记是一定要关闭的,在线等啊 !
解决了就马上结贴

81,094

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧