- 浏览: 2081707 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
无心流泪wan:
private static final Log log = ...
log4j Category.callAppenders Block -
yjxa901:
博主好: http://www.java.net/down ...
jdk debug -
aptech406328627:
大神,请接收我的膜拜吧,纠结了两天的问题,就这么让你给解决了 ...
java.lang.reflect.MalformedParameterizedTypeException -
xukunddp:
谢谢1楼,我也遇到,搞定了
java.lang.reflect.MalformedParameterizedTypeException -
di1984HIT:
学习了!!!!
jvmstat hsperfdata java.io.tmpdir
最近做一个项目需要修改用户提交文本中的url。其实不管是这个应用还是其他的应用,都有需要用到正则表达式的地方,因为程序里的数据大部分都是字符类型,最终用户看到的也都是字符类型(不是简单的理解为String,你一个110你也未必知道是int类型,从网络过来的还都是字符),所以这个世界的数据都是表格式的(LISP)表格中都是字符类型的。ok不乱扯了这只是我的理解。
先来看代码好了。
import java.util.HashSet; import java.util.Iterator; import java.util.Set; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * * @author dikar * 比较简陋的提取url * 真的很丑陋,都怪自己正则没学好,正则里多次匹配忘了怎么写了,要不很好搞定,哎 * 提取完的url保存在SET里 * 可以针对这个做新的处理 * 大家可以看下好的爬虫是如何提取url的,待有时间分析下 * */ 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里*/ parseUrl(set,ss); /**针对解析出来的url做处理*/ System.out.println(replaceHtml(set,ss)); } /**给每个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; } 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) { bString=matcher.group(matcher.groupCount()-3);//这个group包含所有符合正则的字符串 aString=matcher.group(matcher.groupCount()-2);//这个group包含url的html标签 String url1=matcher.group(matcher.groupCount()-1);//最后一个group就是url set.add(url1);//将找到的url保存起来 bString=bString.replaceAll(aString, "");//去掉已经找到的url的html标签 } } if(bString!=null) { parseUrl(set,bString);//继续循环提取下一个url } } } } }
一定要好好学习下正则了, ,去偷学点爬虫的抓取知识(聚类 好高深)
补充下新学到的懒惰匹配,简单易懂
import java.util.HashSet; import java.util.Iterator; import java.util.Set; import java.util.regex.Matcher; import java.util.regex.Pattern; public class TestReg { /**多次使用的使用不需要重新编译正则表达式了,对于频繁调用能提高效率 * * * */ public static final String patternString1="<[aA]\\s*(href=[^>]+)>(.*?)</[aA]>"; public static Pattern pattern1 =Pattern.compile(patternString1,Pattern.DOTALL); /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub /**测试的数据*/ String ss="这是测试<a href=http://www.ba*****idu.cn>www.goog[]e.cn</a>真的是测试我试下<A href='http://www.google.cn'>www.google.cn</a>了"; parseUrl(null,ss); } public static void parseUrl(Set<String> set,String var) { Matcher matcher=null; String result=null; matcher=pattern1.matcher(var); while(matcher!=null && matcher.find()) { int a=matcher.groupCount(); while((a--)>0) { System.out.println(matcher.group(a)); } } } }
发表评论
-
groovy shell 安全
2017-01-18 11:29 1168groovy 可以动态执行代码,但是我们也想他在一定的沙箱中 ... -
eclipse 插件
2016-11-17 12:00 553eclipse remote editor https: ... -
java method signature
2013-08-12 21:07 2675case 'B': _type = T_BYT ... -
eclipse显示GC的按钮
2013-06-18 19:32 4281同事说idea的一个比较亮的功能是可以手动去GC,然后机器 ... -
好用的maven插件收集
2013-02-22 10:40 13091:Maven Shade Plugin(把所有jar打到一 ... -
查看JVM Flags
2013-01-09 14:22 1300-XX:+PrintFlagsFinal Jav ... -
开源的好用JVM问题排查工具
2013-01-08 09:45 1825TProfiler https://github.com/ ... -
java ocr
2013-01-04 13:06 2945java OCR相关的资料记录 Clara OC ... -
eclipse ast
2012-12-23 22:36 974Eclipse JDT - Abstract Syntax ... -
正则生成器
2012-12-23 22:24 933能够依据普通文本给出可能的正则组合 http://ww ... -
Kilim
2012-12-14 23:40 1071Java 开发 2.0: Kilim 简介 h ... -
IO Design Patterns Reactor VS Proactor
2012-11-13 01:34 14671:两种高性能I/O设计模式(Reactor/Proactor ... -
antlr
2012-11-13 00:36 11891:使用 Antlr 开发领域语言 http://www.i ... -
java singalException
2012-11-12 21:39 948之前看到毕大师一封关于异常多造成的cpu us很高的分析邮件, ... -
log4j Category.callAppenders Block
2012-11-06 17:01 10022经常在高并发下就遇到log4j用错引起的线程block住的问题 ... -
Troubleshooting JDK
2012-10-26 14:13 1486收集整理下JDK自带的关于 Troubleshooting 的 ... -
JavaOne 2011 Content Catalog
2012-10-14 17:12 1137上一篇讲javaone 2012,这次找了下2011的资料。 ... -
JavaOne 2012 Content Catalog
2012-10-13 16:07 1271转载自:http://marxsoftware.blogspo ... -
Memory usage of Java
2012-10-01 17:30 1192用JDK自带的api计算size,每次都会有个多余的12,看了 ... -
GC roots
2012-10-01 17:07 18201:GC roots http://www.yourkit. ...
相关推荐
使用httpclient抓取页面信息时需要填写HOST,使用此正则提取抓取URL的HOST内容
匹配网址URL的正则表达式:[a-zA-z]+://[^s]* 评注:网上流传的版本功能很有限,上面这个基本可以满足需求 匹配帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$ 评注:...
在真实世界中提取URL. 206 扩展的例子... 208 保持数据的协调性... 209 解析CSV文件... 213 第6章:打造高效正则表达式.... 221 典型示例... 222 稍加修改——先迈最好使的腿... 223 效率vs准确性... 223 ...
匹配网址URL的正则表达式:[a-zA-z]+://[^s]* 评注:网上流传的版本功能很有限,上面这个基本可以满足需求 匹配帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$ ...
即使有经验的用户也经常会遇到性能不佳、误报、漏报等让人挠头的错误,本书对于如何使用正则表达式来解决一些常见的问题给出了按部就班的解决方案,其中包括c#、Java、JavaScript、Perl、PHP、Python、Ruby和VB...
即使有经验的用户也经常会遇到性能不佳、误报、漏报等让人挠头的错误,本书对于如何使用正则表达式来解决一些常见的问题给出了按部就班的解决方案,其中包括c#、Java、JavaScript、Perl、PHP、Python、Ruby和VB...
[JAVA] javascript 正则表达式 秋雨叶 发表于 2004-12-9 14:54:13 正则表达式是一个描述字符模式的对象。 JavaScript的RegExp对象和String对象定义了使用正则表达式来执行强大的模式匹配和文本检索与替换函数的...
* Summary of regular-expression constructs 正则表达式结构简介: * Construct Matches * Characters 字符: * x The character x x 字符 x * \\ The ...
说明一下,这里我只是一个搬运工,正则表达式是根据android.util.Patterns类的正则表达式提取出来的,对于使用JAVA开发,可以直接使用这个来对一下常用的正则表达式校验.这里主要包含:Web URL的校验,域名的校验,IP地址的...
网页爬虫:就是一个程序...4.建立正则规则,因为这里我们是爬去网页中的邮箱信息,所以建立匹配 邮箱的正则表达式:String regex=”\w+@\w+(\.\w+)+”; 5.将提取到的数据放到集合中。 代码: import java.io.Buffered
)+[a-zA-Z0-9]+\\.[x|X][m|M][l|L]$26 中文字符的正则表达式:[\u4e00-\u9fa5]27 双字节字符:[^\x00-\xff] (包括汉字在内,可以用来计算字符串的长度(一个双字节字符长度计2,ASCII字符计1))28 空白行的正则表达式...
读取Html文件,利用正则表达式提取html里面所有a标签的url和文本,
* 正则表达式匹配关键数据 * @param line * @return */ private Set<String> parse(String line) { Set resSet = new LinkedHashSet(); Pattern pattern = Pattern.compile(reg); Matcher matcher = pattern...
ereg() and eregi() 有一个特性是允许用户通过正则表达式去提取字符串的一部分(具体用法你可以阅读手册). 比如说,我们想从 path/URL 提取文件名 – 下面的代码就是你需要: ereg("([^\\/]*)$", $pathOrUrl, $regs);...
3 匹配匹配并提取url ; 4 匹配并提取http ; 5.匹配日期 6 匹配电话; 7 匹配身份证 8 匹配邮编代码 9. 不包括特殊字符的匹配 (字符串中不包括符号 数学次方号^ 单引号' 双引号" 分号; 逗号, 帽号: 数学减号- 右尖...
(1)新闻正文提取,采用正则表达式提取指定网站栏目新闻的标题、正文和发表时间。 评分标准:一个栏目15分(多一个栏目+5分)(25分);使用通用算法提取不固定格式正文(不算很难)40分 (2)中文分词(worldcount...
是一套只需要定义XPath,就可实现爬取网站,APP的系统, 支持多种解析方式(XPath,正则表达式),多种下载方式(HttpClient库, PhantomJs, Selenium),多种输出方式(Excel,MongoDB)。 爬虫(Web Crawler)是一种...
常用的解析工具有正则表达式、XPath、Beautiful Soup等。这些工具帮助爬虫定位和提取目标数据,如文本、图片、链接等。 数据存储: 爬虫将提取的数据存储到数据库、文件或其他存储介质中,以备后续分析或展示。常用...
常用的解析工具有正则表达式、XPath、Beautiful Soup等。这些工具帮助爬虫定位和提取目标数据,如文本、图片、链接等。 数据存储: 爬虫将提取的数据存储到数据库、文件或其他存储介质中,以备后续分析或展示。常用...