leanboot精益编程系统,是通过editoermd来进行markdown的文章编辑,
- toc是本编辑器特有的目录功能,需求是需要提取toc出来,独立显示。
- 对文章的一些特有属性,如img.src等,有时候需要修改前缀地址,都可以使用该方法进行查找与替换
- 虽然有其他更加方便的方法,如使用jsoup来解析html,来获取对应的便签进行统一修改
一、java.util.regex.Pattern类
1. 匹配模式与匹配器
方法:Pattern.compile(String regex, int flags)
- regex : 正则表达式
- flags :匹配模式标识,通常使用Pattern.CASE_INSENSITIVE,为大小写不敏感匹配
//1.正则表达式
// tag为标签名
String regix = "<" + tag + "[^>]*?>[\\s\\S]*?<\\/" + tag + ">";
//2.匹配模式
Pattern pattern = Pattern.compile(regix, Pattern.CASE_INSENSITIVE);
//3.匹配器
Matcher matcher = pattern.matcher(html);
2.去除匹配标签
//2.5 过滤特定标签
public static String clearTag(String html,String tag) {
String regix = "<" + tag + "[^>]*?>[\\s\\S]*?<\\/" + tag + ">";
if(StringUtils.isBlank(html)) {
return "";
}
Pattern p_space = Pattern.compile(regix, Pattern.CASE_INSENSITIVE);
Matcher m_space = p_space.matcher(html);
html = m_space.replaceAll(""); // 过滤空格回车标签
return html.trim();
}
3.替换
通常用于对一些标签进行替换操作,如文章中不允许直接发布对外链接,可以把链接转一下
如
<a href="www.baidu.com">百度</a> 转化为:
[百度](www.baidu.com)
代码如下:
public static String linkOpen(String html) {
if(StringUtils.isBlank(html)) {
return "";
}
String regEx_a = "<a[^>]*?>[\\s\\S]*?<\\/a>";
//1.正则匹配
Pattern p_slot = Pattern.compile(regEx_a, Pattern.CASE_INSENSITIVE);
Matcher matcherSlot = p_slot.matcher(html);
//2.循环查找
StringBuffer sb = new StringBuffer();
boolean result = matcherSlot.find();
while (result) {
//1.获取slot.key
String aHtml = matcherSlot.group();
//2.组装替换内容
String replaceMent = "[" + HtmlUtils.getInText(aHtml, "a") + "](";
replaceMent += HtmlUtils.getAttr(aHtml, "a", "href") + ")";
//3.替换标签(等于修改找到匹配结果)
matcherSlot.appendReplacement(sb,replaceMent);
result = matcherSlot.find();
}
matcherSlot.appendTail(sb);
return sb.toString();
}
4.appendReplacement()和appendTail()用法
appendReplacement:将当前匹配的子字符串替换为指定的字符串,并且将替换后的字符串及其之前到上次匹配的子字符串之后的字符串添加到一个StringBuffer对象中。
appendTail:将最后一次匹配之后剩余的字符串添加到一个StringBuffer对象中。
总结:
- 掌握一些regex正则表达式的一些用法
- 掌握这一种布局匹配,局部替换的基本操作
- 本章只做抛砖引玉,其他深奥的用法请自行度量
小经验:
- 东西够用就行,多的只要有一个基本了解,或者只要让你判断:能做还是不能做的就行
- 当真正遇到一些问题的时候,再来查询其他方法都不迟哦