- 浏览: 425275 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
xiesbao:
找到了,太坑爹了。
Intellij Idea 滚动条跳动的问题 -
hvang1988:
按照你说的例子,主备说的是dbtest1,dbtest2,db ...
阿里开源Mysql分布式中间件:Cobar -
hvang1988:
问个问题:一个数据库的表的全部数据只分布在一个cobar上。多 ...
阿里开源Mysql分布式中间件:Cobar -
SiKing:
多谢,一直被这个问题困扰
Intellij Idea 滚动条跳动的问题 -
guodage003:
多谢 解决了这个蛋疼的问题。。
Intellij Idea 滚动条跳动的问题
引用
做信息采集时,难免要用到一些正则表达式了。但是用正则表达式有个贪婪性问题。
贪婪量词先看整个字符串是不是匹配,如果没有发现匹配,先去掉最后字符串中的最后一个字符,并再次尝试,如果还没有发现匹配,那么再次去掉最后一个字符,这个过程会一直重复下去直到发现匹配或不剩任何字符串,上面的简单量词都是贪婪量词。
惰性量词先看字符串中的第一个字母是不是一个匹配,如果不匹配则继续读入下一个字符进行匹配,如果没有则一直匹配下去,与贪婪量词刚好相反,惰性量词用上面的简单量词跟一个?表示。
支配量词只尝试匹配整个字符串,如果整个字符串不能匹配,不能进一步尝试。
运用前瞻可以告诉正则表达式运算器向前看一些字符而不移动其位置,包括正向前瞻和负向前瞻,正向前瞻检查的是接下来出现的是不是某个特定字符集,而负向 前瞻则是检查接下来的不应该出现的特定字符集。创建正向前瞻要将模式放在(?=和)之间。创建负向前瞻要将模式放在(?!和)之间。
下面我做了个例子来解决下这个问题。主要是用 贪婪限定符 ‘?’。
贪婪量词先看整个字符串是不是匹配,如果没有发现匹配,先去掉最后字符串中的最后一个字符,并再次尝试,如果还没有发现匹配,那么再次去掉最后一个字符,这个过程会一直重复下去直到发现匹配或不剩任何字符串,上面的简单量词都是贪婪量词。
惰性量词先看字符串中的第一个字母是不是一个匹配,如果不匹配则继续读入下一个字符进行匹配,如果没有则一直匹配下去,与贪婪量词刚好相反,惰性量词用上面的简单量词跟一个?表示。
支配量词只尝试匹配整个字符串,如果整个字符串不能匹配,不能进一步尝试。
运用前瞻可以告诉正则表达式运算器向前看一些字符而不移动其位置,包括正向前瞻和负向前瞻,正向前瞻检查的是接下来出现的是不是某个特定字符集,而负向 前瞻则是检查接下来的不应该出现的特定字符集。创建正向前瞻要将模式放在(?=和)之间。创建负向前瞻要将模式放在(?!和)之间。
下面我做了个例子来解决下这个问题。主要是用 贪婪限定符 ‘?’。
package slcx.com.example; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * * 这里是用来检测正则表达式的贪婪性。 * * @author LoongHua * */ public class T { public static void getDefaulst(){ //这里得到默认的那个'XX'及其下一个字符的正则表达式 String regex = ".*(XX.).*"; String s="..aaXXbbXXccXXddXXee.."; Pattern pattern = Pattern.compile(regex); Matcher matcher = pattern.matcher(s); if (matcher.matches()) { System.out.println("默认情况下的结果:"+matcher.group(1)); } } public static void getFirst(){ //我们这里得到第一个'XX'及其下一个字符的正则表达式 String regex = ".*?(XX.).*"; String s="..aaXXbbXXccXXddXXee.."; Pattern pattern = Pattern.compile(regex); Matcher matcher = pattern.matcher(s); if (matcher.matches()) { System.out.println("得到第一个的结果:"+matcher.group(1)); } } public static void getLast(){ String regex = ".*(XX.).*?"; String s="..aaXXbbXXccXXddXXee.."; Pattern pattern = Pattern.compile(regex); Matcher matcher = pattern.matcher(s); if (matcher.matches()) { System.out.println("得到最后一个的结果:"+matcher.group(1)); } } /** * 得到网页中的时间问题 */ public static void getDateTime(){ String html="更新时间:2009-3-23 13:14:31 作 者更新时间:2009-3-23 13:12:54 作 者更新时间:2009-3-16 17:39:54作 者更新时间:2009-3-13 9:07:22作 者更新时间:2009-3-9 13:41:51作 者更新时间:2009-3-5 11:19:36作 者更新时间:2009-3-5 11:16:33作 者更新时间:2009-3-2 11:56:21作 者更新时间:2009-2-26 10:30:19作 者更新时间:2009-2-26 10:28:49更新时间"; // 这个正则表达式能抓取很多类型的日期时间,小到只有日期,大到日期时间(包括秒),这里是默认情况下提取。 //String regex=".*[^\\d]((\\d{4}|\\d{2}) ?[/年-] ?\\d{1,2} ?[/月-] ?\\d{1,2} ?[日 ]?( ?\\d{1,2}( ?[点:] ?\\d{1,2}( ?[分:] ?\\d{1,2} ?秒?)?)?)?)[^\\d].*"; //这里使用了贪婪限定符 ? 提取第一个时间 String regex=".*?[^\\d]((\\d{4}|\\d{2}) ?[/年-] ?\\d{1,2} ?[/月-] ?\\d{1,2} ?[日 ]?( ?\\d{1,2}( ?[点:] ?\\d{1,2}( ?[分:] ?\\d{1,2} ?秒?)?)?)?)[^\\d].*"; Pattern pattern = Pattern.compile(regex); Matcher matcher = pattern.matcher(html); if (matcher.matches()) { System.out.println("得到第一个的时间是:"+matcher.group(1)); } //这里使用了贪婪限定符 ? 提取最后一个时间 regex=".*[^\\d]((\\d{4}|\\d{2}) ?[/年-] ?\\d{1,2} ?[/月-] ?\\d{1,2} ?[日 ]?( ?\\d{1,2}( ?[点:] ?\\d{1,2}( ?[分:] ?\\d{1,2} ?秒?)?)?)?)[^\\d].*?"; pattern = Pattern.compile(regex); matcher = pattern.matcher(html); if (matcher.matches()) { System.out.println("得到最后一个的时间是:"+matcher.group(1)); } } /** * 当网页中有多个日期时间时,我们又不要开始结尾的日期时间时 * * 这个时候我们时候就不能完全用正则来实现了(可能可以,只是我不知道而已) * * @param index 指定要第几个日期时间。 */ public static void getDateTime(int index){ String regex="((\\d{4}|\\d{2}) ?[/年-] ?\\d{1,2} ?[/月-] ?\\d{1,2} ?[日 ]?( ?\\d{1,2}( ?[点:] ?\\d{1,2}( ?[分:] ?\\d{1,2} ?秒?)?)?)?)[^\\d].*"; String html="更新时间:2009-3-23 13:14:31 作 者更新时间:2009-3-23 13:12:54 作 者更新时间:2009-3-16 17:39:54作 者更新时间:2009-3-13 9:07:22作 者更新时间:2009-3-9 13:41:51作 者更新时间:2009-3-5 11:19:36作 者更新时间:2009-3-5 11:16:33作 者更新时间:2009-3-2 11:56:21作 者更新时间:2009-2-26 10:30:19作 者更新时间:2009-2-26 10:28:49更新时间"; Pattern pattern = Pattern.compile(regex); int count=0; while(html.length()>0){ Matcher matcher = pattern.matcher(html); if (matcher.matches()) { count++; if(count==index){ System.out.println("得到第 "+index+" 个的时间是:"+matcher.group(1)); } else{ html=html.substring(matcher.group(1).length()); } } else{ html=html.substring(1); } } } public static void main(String[] args) { getDefaulst(); getFirst(); getLast(); getDateTime(2); } } //运行结果是: 默认情况下的结果:XXe 得到第一个的结果:XXb 得到最后一个的结果:XXe 得到第一个的时间是:2009-3-23 13:14:31 得到最后一个的时间是:2009-2-26 10:28:49 得到第 2 个的时间是:2009-3-23 13:12:54
发表评论
-
深入理解Java内存模型
2014-11-08 16:54 977深入理解Java内存模型(一)——基础深入理 ... -
阿里开源Mysql分布式中间件:Cobar
2014-08-12 11:54 64344这几天研究 ... -
今日开源介绍:Google Guava、Google Guice、Joda-Time
2014-08-11 11:55 18189一、Guava 是一个 Google 的基于java1.6的 ... -
Jackson 动态过滤属性
2014-06-20 16:15 2981在把java对象转换为json时,有时需要依据需求动态过滤掉 ... -
自实现CAS原理JAVA版,模拟下单库存扣减
2014-04-02 17:47 6992在做电商系统时,库存 ... -
JAVA逻辑判断工具类
2013-09-06 21:33 1691在开发过程中,经常需要对“对象”、Map、Collecti ... -
Servlet2.4 监听器
2011-06-17 17:48 1523Servlet API提供了基本的应用程序事件监听器接口。编程 ... -
JSP页面编译成Servlet类文件过程中所涉及到的编码问题
2011-02-23 12:16 2841当请求一个JSP页面时,一般的都需要经历下面几个阶段: 1 ... -
Java中的字符集编码入门(六)Java中的增补字符
2011-02-23 12:11 1431Java号称对Unicode提 ... -
Java中的字符集编码入门(五)Java代码中的字符编码转换
2011-02-23 12:08 1110如果你是JVM的设计者,让你来决定JVM中所有字符的表 ... -
Java中的字符集编码入门(四)网页文件的编码
2011-02-23 12:03 1069接着上节的思路说,一个网页要想在浏览器中能够正确显示,需要在三 ... -
Java中的字符集编码入门(三)GB2312,GBK与中文网页
2011-02-23 12:02 1228GB2312是对中国的开发人员来说很重要的一个词汇,它的来龙去 ... -
Java中的字符集编码入门(二)编码字符集与字符集编码的区别
2011-02-23 12:01 900需要再一次强调的是, ... -
Java中的字符集编码入门(一)Unicode与UCS的历史恩怨
2011-02-23 11:59 1019ASCII及相关标准 ... -
方便管理工程中的SQL语句
2010-10-13 17:13 1781引用 之前在项目开发时候,经理要求把所有的SQL语句挑出 ... -
常见通信名称缩写解释
2010-09-03 16:05 2288引用 在看新闻时,购买手机时,经常听到关于通信方面的一 ... -
飞信维脉系统(定时短息发送系统)
2010-08-01 21:27 1552引用 因为工作原因 ... -
HTTP协议介绍
2010-07-28 09:45 789引用 HTTP(HyperTextTransferPro ... -
Java调用存储过程举例
2010-07-23 18:22 883Java调用oracle存储过程的示例总结如下。 ... -
Oracle数据库链接池
2010-04-13 17:28 1975引用 很多时候我们都要操作数据库,高效数据库操作的第一步 ...
相关推荐
XRegExp 是一个开源的 JavaScript 库提供一个参数化、可扩展的支持各种浏览器的正则表达式的实现库,支持附加语法、标志以及方法。 XRegExp XRegExp是一个为JS的正则表达式提供扩展功能的库, 调用之后可以弥补原生...
用delphi实现的,批量抓取指定页面中的所有e-mail地址,使用了TPerlRegEx插件(正则表达式),希望对你有帮助
使用正则表达式提取时间和位置。 去做 由于这些警报的结构是如此重复,因此从它们中提取结构化数据应该很容易。 我想可能需要一定程度的 NLP 并且不是绝对必要的。 值得注意的是:犯罪,肇事者描述。 位置提取...
常用显示日期时间、农历、生肖的日历类(CCalendar.cs,DateTimeHelper.cs) 中国农历年处理类(ChineseCalendar.cs) 正则表达式辅助类(CRegex.cs) CString 的摘要说明。(CString.cs) CText文本内容的类库(CText....
2. 常用显示日期时间、农历、生肖的日历类(CCalendar.cs,DateTimeHelper.cs) 3. 中国农历年处理类(ChineseCalendar.cs) 4. 正则表达式辅助类(CRegex.cs) 5. CString 的摘要说明。(CString.cs) 6. CText文本内容...
2.常用显示日期时间、农历、生肖的日历类(CCalendar.cs,DateTimeHelper.cs) 3.中国农历年处理类(ChineseCalendar.cs) 4.正则表达式辅助类(CRegex.cs) 5.CString 的摘要说明。(CString.cs) 6.CText文本内容的...
使用正则表达式从 html 标签中提取复杂的日期字符串。 使用 unittest 测试框架执行以下测试: "test_scrape_data_from_coursera" -- 验证一个虚拟 html 文件的内容是否被 Beautiful Soup 正确捕获。 "test_create...
常用的解析工具有正则表达式、XPath、Beautiful Soup等。这些工具帮助爬虫定位和提取目标数据,如文本、图片、链接等。 数据存储: 爬虫将提取的数据存储到数据库、文件或其他存储介质中,以备后续分析或展示。常用...
6 星的存储库) 评分系统以强调可信结果,过滤掉常见误报,并优化密集repo 挖掘 Base64 检测和解码 将 GitHound 构建到您的工作流程中的选项,例如自定义正则表达式和仅结果输出模式 用法 echo "\"tillsongalloway....
13.5.1 正则表达式的基本语法 259 13.5.2 Pattern类简介 262 13.5.3 Matcher类简介 263 13.5.4 Pattern与Matcher类的综合应用 264 13.6 String类中正则式的应用 266 13.6.1 模式匹配检查 266 13.6.2 ...