Java正则表达式的应用
平时我们总会遇到一些需求需要处理某些固定格式的代码片段来达到我们的要求,下面我们就来使用Java正则表达式替换我们需要的代码。首先来看一下替换前的页面长啥样
文章图片
image 地址中能看到有许多我们不需要的广告信息。 这个时候要改变其中指定的标签或者是改变标签中指定的属性。
1、如何获取这段html代码中的所有img标签中的图片地址做一些相关的操作
/**
* 得到网页中图片的地址
*/
public static Set getImgStr(String htmlStr) {
Set pics = new HashSet<>();
String img = "";
Pattern p_image;
Matcher m_image;
//分解正则表达式
// ]*? 匹配不为>的不限次数 0次或1次
String regEx_img = "]*?>";
//Pattern.CASE_INSENSITIVE 参数含义为忽略大小写匹配,会稍微损失一点性能
// 把这个正则的字符串编译为Pattern对象
p_image = Pattern.compile(regEx_img, Pattern.CASE_INSENSITIVE);
//调用Pattern对象的matcher方法返回一个Matcher对象
m_image = p_image.matcher(htmlStr);
while (m_image.find()) {
// 得到数据
img = m_image.group();
// 匹配中的src数据
Matcher m = Pattern.compile("src\\s*=\\s*\"?(.*?)(\"|>|\\s+)").matcher(img);
while (m.find()) {
pics.add(m.group(1));
}
}
return pics;
}
2、如何获取html代码中的指定的标签中的内容 ,获取标签为article包裹的所有内容
/**
* 获取html代码中的指定标签
*/
public static String getArticleStr1(String htmlStr) {
String img = "";
Pattern p_image;
Matcher m_image;
String regEx_img = "";
p_image = Pattern.compile(regEx_img, Pattern.CASE_INSENSITIVE);
m_image = p_image.matcher(htmlStr);
while (m_image.find()) {
// 得到数据
img = m_image.group();
}
return img;
}
3、如何替换html代码中的指定标签中的内容,比如将网页中的html代码中的img标签添加一些属性样式 ,src属性不改变
/**
* 替换指定标签的指定属性
* @param str html代码
* @param beforeTag 标签名
* @param tagAttrib 属性名
* @param startTag 替换为 开始标签
* @param endTag 替换为结束标签
* @return
*/
public static String replaceHtmlTag(String str, String beforeTag, String tagAttrib, String startTag, String endTag) {
String regxpForTag = "<\\s*" + beforeTag + "\\s+([^>]*)\\/>";
//需要替换的标签正则匹配
Pattern patternForTag = Pattern.compile(regxpForTag);
//编译表达式
Matcher matcherForTag = patternForTag.matcher(str);
StringBuffer sb = new StringBuffer();
boolean result = matcherForTag.find();
while (result) {
String img = "";
Matcher matcherForAttrib1 = Pattern.compile("src\\s*=\\s*\"?(.*?)(\"|>|\\s+)").matcher(matcherForTag.group(1));
//获取指定标签中的指定属性
if (matcherForAttrib1.find()) {
img = startTag + matcherForAttrib1.group(1) + endTag;
//拼接需要替换的标签
}
matcherForTag.appendReplacement(sb, img);
result = matcherForTag.find();
}
matcherForTag.appendTail(sb);
//最后将所有标签拼接到一起返回
return sb.toString();
}
调用代码如下:
//替换img标签属性
replaceHtmlTag( "html字符串" , "img", "src", "");
【Java正则表达式的应用】
通过上面这些操作后,基本上能获取到想要的代码部分。Java正则表达式还可以做一些验证的操作,比如说验证手机号,验证邮箱等等。
java中关于正则的类在java.util.regex包中,该包中有3个类和一个接口,分别用处如下:
*MatchResult*
:定义一些Matcher中的接口的一些查询方法,用于确定正则表达式的匹配结果Matcher
:代表一组Pattern对象下的匹配结果Pattern
:代表一种指定的正则表达式,核心静态方法 compile(“正则表达式”) 用于编译给定的正则表达式PatternSyntaxException
:未通过检查的抛出异常如果文章的内容对你有帮助,欢迎关注公众号:
优享JAVA(ID:YouXiangJAVA)
,那里有更多的技术干货,并精心准备了一份程序员书单。期待你的到来!推荐阅读
- JAVA(抽象类与接口的区别&重载与重写&内存泄漏)
- 事件代理
- Java|Java OpenCV图像处理之SIFT角点检测详解
- java中如何实现重建二叉树
- 数组常用方法一
- 【Hadoop踩雷】Mac下安装Hadoop3以及Java版本问题
- Python爬虫|Python爬虫 --- 1.4 正则表达式(re库)
- Java|Java基础——数组
- RxJava|RxJava 在Android项目中的使用(一)
- java之static、static|java之static、static final、final的区别与应用