- 浏览: 2114224 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
无心流泪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 1218groovy 可以动态执行代码,但是我们也想他在一定的沙箱中 ... -
eclipse 插件
2016-11-17 12:00 641eclipse remote editor https: ... -
java method signature
2013-08-12 21:07 2731case 'B': _type = T_BYT ... -
eclipse显示GC的按钮
2013-06-18 19:32 4359同事说idea的一个比较亮的功能是可以手动去GC,然后机器 ... -
好用的maven插件收集
2013-02-22 10:40 13601:Maven Shade Plugin(把所有jar打到一 ... -
查看JVM Flags
2013-01-09 14:22 1348-XX:+PrintFlagsFinal Jav ... -
开源的好用JVM问题排查工具
2013-01-08 09:45 1870TProfiler https://github.com/ ... -
java ocr
2013-01-04 13:06 3057java OCR相关的资料记录 Clara OC ... -
eclipse ast
2012-12-23 22:36 1025Eclipse JDT - Abstract Syntax ... -
正则生成器
2012-12-23 22:24 988能够依据普通文本给出可能的正则组合 http://ww ... -
Kilim
2012-12-14 23:40 1118Java 开发 2.0: Kilim 简介 h ... -
IO Design Patterns Reactor VS Proactor
2012-11-13 01:34 15171:两种高性能I/O设计模式(Reactor/Proactor ... -
antlr
2012-11-13 00:36 12321:使用 Antlr 开发领域语言 http://www.i ... -
java singalException
2012-11-12 21:39 992之前看到毕大师一封关于异常多造成的cpu us很高的分析邮件, ... -
log4j Category.callAppenders Block
2012-11-06 17:01 10186经常在高并发下就遇到log4j用错引起的线程block住的问题 ... -
Troubleshooting JDK
2012-10-26 14:13 1542收集整理下JDK自带的关于 Troubleshooting 的 ... -
JavaOne 2011 Content Catalog
2012-10-14 17:12 1178上一篇讲javaone 2012,这次找了下2011的资料。 ... -
JavaOne 2012 Content Catalog
2012-10-13 16:07 1319转载自:http://marxsoftware.blogspo ... -
Memory usage of Java
2012-10-01 17:30 1226用JDK自带的api计算size,每次都会有个多余的12,看了 ... -
GC roots
2012-10-01 17:07 18601:GC roots http://www.yourkit. ...
相关推荐
Java正则表达式是Java编程语言中用于处理字符串的强大工具,它允许程序员通过模式匹配来查找、替换或分割文本。本教程将深入讲解Java中的正则表达式,并提供丰富的实例来帮助开发者理解和应用这些概念。 1. 正则...
Java正则表达式是Java编程语言中的一个强大工具,它用于模式匹配和字符串处理,尤其在数据验证、文本检索和替换等方面发挥着重要作用。本教程是专为初学者设计的HTML版,旨在帮助读者快速掌握Java正则表达式的概念和...
Java正则表达式是Java编程语言中的一个强大工具,用于处理字符串模式匹配和搜索替换操作。它是基于Perl和POSIX正则表达式的实现,提供了一种灵活且强大的方式来处理文本数据。本文件"java正则表达式详解(PDF)"深入...
正则表达式自动生成器V2.0.0.1是一款强大的工具,旨在帮助用户方便快捷地构建和测试正则表达式。它提供了多语言支持,使得不同地区的用户都能无障碍地使用。在IT领域,正则表达式是进行文本处理、数据验证和搜索替换...
Java正则表达式是Java编程语言中用于处理字符串的强大工具,它允许程序员通过模式匹配来查找、替换或分割文本。正则表达式在各种场景下都有广泛应用,如数据验证、文本提取、搜索替换等。本篇文章将深入探讨Java中的...
Java正则表达式是Java编程语言中用于处理字符串的强大工具,它允许程序员通过模式匹配来查找、替换或分割文本。正则表达式在各种场景下都有广泛应用,如数据验证、文本提取、搜索替换等。本篇文章将深入探讨Java中的...
Java正则表达式是编程语言Java中用于处理字符串的强大工具,它允许程序员通过模式匹配来查找、替换或提取文本。正则表达式在各种场景下都有广泛应用,如数据验证、文本搜索与替换等。本课件旨在为初学者提供一个Java...
Java正则表达式是Java编程语言中的一个强大工具,用于处理字符串匹配、查找、替换等操作。它基于Perl风格的正则表达式,为开发者提供了高效且灵活的文本处理能力。在这个“Java正则表达式从入门到精通”的主题中,...
Java正则表达式是Java编程语言中的一个强大工具,它用于在字符串中进行模式匹配和查找、替换等操作。在本文中,我们将深入探讨Java正则表达式的概念、语法以及如何在实际编程中使用它们。 1. **正则表达式基础** -...
Java正则表达式是Java编程语言中用于处理字符串的强大工具,它允许程序员通过模式匹配来查找、替换或分割文本。正则表达式在各种场景下都有广泛应用,如数据验证、文本提取、日志分析等。Java中的正则表达式功能主要...
本资料"java_zhengze.rar"提供了对Java正则表达式的详细讲解,包括基本概念、元字符、预定义字符类以及各种匹配操作,对于Java开发者来说是一份非常实用的学习资源。 首先,我们来了解一下正则表达式的基石——元...
### Java正则表达式的应用与理解 #### 一、引言 在软件开发过程中,处理字符串是一项非常常见的任务。为了高效地完成字符串的匹配、查找、替换等操作,正则表达式成为了一种不可或缺的工具。Java作为一种广泛使用...
Java正则表达式是Java编程语言中用于处理字符串的强大工具,它遵循Perl 5规范,提供了灵活且功能丰富的模式匹配能力。Jakarta ORO(Oracle RegEx)库是Apache软件基金会的一个项目,它是一个高性能的Java正则表达式...
Java正则表达式是Java编程语言中的一个强大工具,用于处理字符串模式匹配和搜索替换操作。在本实例教程中,我们将深入探讨Java正则表达式的概念、语法以及常见应用。 一、Java正则表达式基础 Java正则表达式基于...
### Java正则表达式实例详解 #### 一、概述 正则表达式是一种强大的文本处理工具,能够帮助我们在字符串中查找、替换或提取特定模式的数据。在Java编程中,正则表达式的应用非常广泛,例如在表单验证、数据清洗等...
正则表达式是一种强大的文本处理工具,用于模式匹配、搜索、替换等操作,在软件开发、数据处理、网络爬虫等领域有着广泛的应用。在项目中直接使用正则表达式可以极大地提高代码的效率和可读性。以下是对给定文件中的...
Java正则表达式的语法与C#基本一致,但有一些小差异,比如Java中的`\d`等预定义字符类需要写成`\p{Digit}`。 正则表达式的强大在于它的灵活性和表达力。例如,我们可以用`(\\d{3})-(\\d{2})-(\\d{4})`来匹配美国...
Java正则表达式是Java编程语言中用于处理字符串的强大工具,它允许程序员通过模式匹配来查找、替换或分割文本。正则表达式(Regular Expression,简称regex)是一种由字符、元字符和操作符组成的模式,可以用来匹配...
- 在JavaScript、Python、Java、C#等编程语言中,正则表达式都有内置的支持,提供了构造、匹配、替换、查找等功能。 8. **实例应用**: - 验证邮箱地址:`/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/` ...