当前位置:首页 > 编程开发

Java正则表达式匹配、替换HTML内容( 转 )

webgou17年前 (2009-10-10)编程开发333

[转:http://blog.csdn.net/xuanner/archive/2008/05/24/2477319.aspx]
(src:http://www.cnblogs.com/dragon/archive/2006/05/08/394078.html)
 曾经了解过JavaScript的正则表达式,知道其功能的强大,对于处理文本比用普通的API处理不管从效率上还是从功能上都有很大的优势。今天项目要求用到Java的正则表达式,于是在网上Google,找到一个Jakarta ORO的库,听说是Java中功能最强大的正则表达式库,确实也如此,Sun公司的JDK里自带的正则表达式功能是远远不如ORO库,从正则表达式的角度上看,其比普通的API处理文本是复杂很多,但如果应用得恰当的话,会提高工程的质量,于是项目中就应用了这个ORO库,把浏览器请求得到的HTML页面进行解释替换实现一个代理采集信息的功能。感觉自己好像是在开发软件,不是在设计网页。正则表达式有一个很好用的工具--RegexBuddy,应用这个工具可以调度一个匹配你需要的正则表达式串,经过几番调度,把一些HTML标签的正则表达式匹配出来,接下来......
    好了,废话少说,现在开始......

    第一:像网页链接<a .......... href="[url1]" .......>之间的内容中[URL[绝对地址替换成相对地址,首先要查找匹配这个链接,查找匹配这个串的正则表达式串为

(<\s*a\s+(?:[^\s>]\s*){0,})href\s*=\s*("|'|)([^\2\s>]*)\2((?:\s*[^\s>]){0,}\s*>)

    //查找匹配的代码如下:
    String  patternStrs="(<\\s*a\\s+(?:[^\\s>]\\s*){0,})href\\s*=\\s*(\"|'|)([^\\2\\s>]*)\\2((?:\\s*[^\\s>]){0,}\\s*>)";
    PatternCompiler complier = new Perl5Compiler();
    PatternMatcher matcher = new Perl5Matcher();

    Pattern patternForLink = complier.compile(patternStrs,
                                              Perl5Compiler.
                                              CASE_INSENSITIVE_MASK);
    PatternMatcherInput input = new PatternMatcherInput(htmlContent);
    while (matcher.contains(input, patternForLink)) {
      MatchResult match = matcher.getMatch();
      //处理匹配的结果,是要替换还是要其他处理
    }

    第二:对其他的标签也类似只要把匹配的字符串改一下为要匹配的标签就可以了。(如IMG标签)
(<\s*img\s+(?:[^\s>]\s*){0,})src\s*=\s*("|'|)([^\2\s>]*)\2((?:\s*[^\s>]){0,}\s*>),这样就可以处理
<img.....................src="[url]"...............>的标签匹配,对其他的标签也一样......
总结:对于大量要处理的文本,建议还是用到正则表达式,而要处理的文本比较少时,用普通的字符串API处理函数就足够了。
 

扫描二维码推送至手机访问。

版权声明:本文由知了博客发布,如需转载请注明出处。

本文链接:https://www.webgou.info/?id=62

标签: 正则表达式
分享给朋友:

“Java正则表达式匹配、替换HTML内容( 转 )” 的相关文章

apache+tomcat+mysql 负载平衡和集群

apache+tomcat+mysql 负载平衡和集群前言:公司开发了一个网站,估计最高在线人数是3万,并发人数最多100人。开发的网站是否能否承受这个压力,如何确保网站的负荷没有问题,经过研究决定如下:(1) 采用负载平衡和集群技术,初步机构采用Apache+Tomcat的机群技术。(2) 采用压…

Android 修改Bitmap 图片像素的信息 R G B 颜色值 详解

要想修改Bitmap图片的 R G B信息 首先 得先拿到这张图片每个点的Color值 然后根据这个Color值 就可以算出对应的R G B 值 我们都知道在计算机语言中在内存中加载一张图片实际上是把图片的每个点的RGB信息写入内存 如果动态的修改了这些颜色信息 那绘制出来的图片就会改变。修…

iPhone的操作系统介绍MacOS X

摘要:Mac OS X 使用基于 BSD Unix 的内核,并带来Unix风格的内存管理和抢占式多任务处理 (pre-emptive multitasking)。大大改进内存管 理,允许同时运行更多软件,而且实质上消除了一个程序崩溃导致其它程序崩溃的可能性。...…

mysql错误:error 0

今天想重装一下MYSQL,不过在安装进行到最后一步的时候总是无法启动服务,出现 ERROR 0 错误,在网上查了一下知道原来是当机子上以前装过MYSQL的话就会出现这个问题,可以在命令行下输入(sc delete mysql)来删除存在于系统中的MYSQL服务,但是照做之后仍然无法完成安装,于是我将…

vi显示行数命令

vi中显示行数命令::set number跳转到指定行:xx …

devenv.exe的命令行参数

devenv.exe的命令行参数…

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。