正则表达式提取img整个标签 并获取img所有属性及style中的width和heiht

qq_20533371 2016-11-24 11:30:32
<img alt="图1" src="123.png" style="width:1in;height:1in;vertical-align:middle"/>
<img alt="图2" src="456.png" style="width:1in;height:1in;vertical-align:middle"/>
需要获取这种结构的img标签,并获取到src以及style中的width和height的值,最后替换为
<img alt="图1" src="123.png" width=72px height=72px style=“vertical-align:middle"/>
<img alt="图2" src="456.png" width=72px height=72px style=“vertical-align:middle"/>
weith和height存在单位的换算
请问如何实现。我想到的办法就是用正则表达式匹配这种类型的img,获取整个标签内容然后获取到属性,进行单位转换和拼接,最后替换原来的img标签
...全文
1078 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
rickylin86 2016-11-25
  • 打赏
  • 举报
回复

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Test{
	public static void main(String[] args){
		String content = "<img alt=\"pic1\" src=\"123.png\" style=\"width:1in;height:1in;vertical-align:middle\"/>";
		String regex = "^(?<head><img.*?)(?<style>style\\s*=\\s*\"[^\"]+\")(?<tail>.*)$";
		Matcher matcher = Pattern.compile(regex).matcher(content);
		if(!matcher.find()){
			return;
		}
		String style = matcher.group("style");
		String result = matcher.group("head") + matcher.group("tail");
		style = process(style);
		result = result.replaceAll("/>$",style + "/>");
		System.out.println(result);
	}

	private static String process(String style){
		String regex_width = "width:(?<width>\\d+([.]\\d+)?)in;";
		String regex_height = "height:(?<height>\\d+([.]\\d+)?)in;";
		Pattern pattern = Pattern.compile(regex_width);
		Matcher matcher = pattern.matcher(style);
		StringBuffer result = new StringBuffer();
		if(matcher.find()){
			double width = Double.valueOf(matcher.group("width")) * 72;
			result.append(" width=" + width + "px ");
		}
		
		matcher = Pattern.compile(regex_height).matcher(style);
		if(matcher.find()){
			double height = Double.valueOf(matcher.group("height")) * 72;
			result.append(" height=" + height + "px ");
		}

		result.append(style.replaceAll(regex_width,"").replaceAll(regex_height,""));

		return result.toString();
	}
}
qq_20533371 2016-11-25
  • 打赏
  • 举报
回复
引用 2 楼 rickylin86 的回复:
[quote=引用 楼主 qq_20533371 的回复:] <img alt="图1" src="123.png" style="width:1in;height:1in;vertical-align:middle"/> <img alt="图2" src="456.png" style="width:1in;height:1in;vertical-align:middle"/> 需要获取这种结构的img标签,并获取到src以及style中的width和height的值,最后替换为 <img alt="图1" src="123.png" width=72px height=72px style=“vertical-align:middle"/> <img alt="图2" src="456.png" width=72px height=72px style=“vertical-align:middle"/> weith和height存在单位的换算 请问如何实现。我想到的办法就是用正则表达式匹配这种类型的img,获取整个标签内容然后获取到属性,进行单位转换和拼接,最后替换原来的img标签
既然你已经想到了办法了那么就可以尝试写下啊。直接的思路本来就是这样[/quote] 主要是不会正则。。。
qq_20533371 2016-11-25
  • 打赏
  • 举报
回复
引用 1 楼 sgwen20 的回复:
replaceAll("style=\"width:(\\d+)in;height:(\\d+)in;", "width=$1px width=$2px style=\"")
可能还有小数这些呢,正则要怎么写呀
shiguowen 2016-11-25
  • 打赏
  • 举报
回复
引用 3 楼 qq_20533371 的回复:
[quote=引用 1 楼 sgwen20 的回复:] replaceAll("style=\"width:(\\d+)in;height:(\\d+)in;", "width=$1px width=$2px style=\"")
可能还有小数这些呢,正则要怎么写呀[/quote] replaceAll("style=\"width:([\\d\\.]+)in;height:([\\d\\.]+)in;", "width=$1px width=$2px style=\"")
shiguowen 2016-11-24
  • 打赏
  • 举报
回复
replaceAll("style=\"width:(\\d+)in;height:(\\d+)in;", "width=$1px width=$2px style=\"")
rickylin86 2016-11-24
  • 打赏
  • 举报
回复
引用 楼主 qq_20533371 的回复:
<img alt="图1" src="123.png" style="width:1in;height:1in;vertical-align:middle"/> <img alt="图2" src="456.png" style="width:1in;height:1in;vertical-align:middle"/> 需要获取这种结构的img标签,并获取到src以及style中的width和height的值,最后替换为 <img alt="图1" src="123.png" width=72px height=72px style=“vertical-align:middle"/> <img alt="图2" src="456.png" width=72px height=72px style=“vertical-align:middle"/> weith和height存在单位的换算 请问如何实现。我想到的办法就是用正则表达式匹配这种类型的img,获取整个标签内容然后获取到属性,进行单位转换和拼接,最后替换原来的img标签
既然你已经想到了办法了那么就可以尝试写下啊。直接的思路本来就是这样

62,616

社区成员

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

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