java正则表达式提取URL
来源:互联网 发布:sql语句范围查询 编辑:程序博客网 时间:2024/04/29 18:07
package spider4;import java.util.HashSet;import java.util.Iterator;import java.util.Set;import java.util.regex.Matcher;import java.util.regex.Pattern;public class TestString { /** 多次使用的话不需要重新编译正则表达式了,对于频繁调用能提高效率 */ public static final String patternString1 = "[^\\s]*((<\\s*[aA]\\s+href\\s*=([^>]+\\s*)>)(.*)</[aA]>).*"; public static final String patternString2 = ".*(<\\s*[aA]\\s+(href\\s*=[^>]+\\s*)>(.*)</[aA]>).*"; public static final String patternString3 = ".*href\\s*=\\s*(\"|'|)http://.*"; public static Pattern pattern1 = Pattern.compile(patternString1, Pattern.DOTALL); public static Pattern pattern2 = Pattern.compile(patternString2, Pattern.DOTALL); public static Pattern pattern3 = Pattern.compile(patternString3, Pattern.DOTALL); /** * @param args */ public static void main(String[] args) { /** 测试的数据 */ String ss = "这是测试<a href=http://www.google.cn>www.google.cn</a>真的是测试了"; /** 保存提取出来的url,用set从某种程度去重,只是字面上,至于语义那就要需要考虑很多了 */ Set<String> set = new HashSet<String>(); /** 解析url并保存在set里 Set是一个不包含重复元素的 collection */ parseUrl(set, ss); /** 针对解析出来的url做处理 */ System.out.println(replaceHtml(set, ss)); //这是测试<a href=http://www.google.cn target="_blank">www.google.cn</a>真的是测试了 } /** 给每个url加上target属性 */ public static String replaceHtml(Set<String> set, String var) { String result = null; /** 最好不要对参数修改 */ result = var; Iterator<String> ite = set.iterator(); while (ite.hasNext()) { String url = ite.next(); if (url != null) { result = result.replaceAll(url, url + " target=\"_blank\""); } } return result; } /** 解析url并保存在set里 Set是一个不包含重复元素的 collection */ public static void parseUrl(Set<String> set, String var) { Matcher matcher = null; String result = null; // 假设最短的a标签链接为 <a href=http://www.a.cn></a>则计算他的长度为28 if (var != null && var.length() > 28) { matcher = pattern3.matcher(var); // 确定句子里包含有链接 if (matcher != null && matcher.matches()) { matcher = pattern1.matcher(var); String aString = null; String bString = null; while (matcher != null && matcher.find()) { if (matcher.groupCount() > 3) { //System.out.println(matcher.groupCount());//4 //System.out.println(matcher.group(0));//group(0) 所有待测试字符串 这是测试<a href=http://www.google.cn>www.google.cn</a>真的是测试了 bString = matcher.group(matcher.groupCount() - 3);// 这个group包含所有符合正则的字符串 group(1) //System.out.println(bString); //<a href=http://www.google.cn>www.google.cn</a> aString = matcher.group(matcher.groupCount() - 2);// 这个group包含url的html标签 group(2) //System.out.println(aString); //<a href=http://www.google.cn> String url1 = matcher.group(matcher.groupCount() - 1);// 最后一个group就是url group(3) //System.out.println(url1); //http://www.google.cn set.add(url1);// 将找到的url保存起来 bString = bString.replaceAll(aString, "");// 去掉已经找到的url的html标签 //System.out.println(bString);//www.google.cn</a> } } if (bString != null) { parseUrl(set, bString);// 继续循环提取下一个url } } } }}
阅读全文
0 0
- java正则表达式提取URL
- url正则表达式提取
- 提取 URL 的正则表达式
- Java提取网页中url的正则表达式
- 提取文本中url的正则表达式
- 正则表达式提取url中的域名
- Python 正则表达式提取URL中的Scheme
- Python 正则表达式提取URL中的USER
- Python 正则表达式提取URL中的Host
- Python 正则表达式提取URL中Port
- Python 正则表达式提取URL中的Path
- Python 正则表达式提取URL中的Query
- Python 正则表达式提取URL中的Fragment
- 提取字符串中的url网址 正则表达式
- java url 正则表达式
- java url正则表达式
- java 正则表达式 提取字符串
- Java正则表达式提取字符
- java 调用hanlp提取关键词
- DenseNets论文笔记及读后感
- Java集合框架(二)--Collection
- 剑指offer系列(8)——斐波那契数列
- C++ MFC 测试数据后台监控程式
- java正则表达式提取URL
- zigbee学习历程
- Realm数据库使用教程(二):增加数据
- Could not transfer artifact org.springframework.boot:spring-boot-starter-parent:pom:1.5.4.RELEASE
- Redis集群方案
- 【备忘】极客学院VIP教程postgresql教程全集视频教程下载
- 将以逗号隔开的字段值转换为对应字典值小记
- 设置webconfig解决ASP.NET上传文件大小限制
- C# 协变和逆变