本文向您介绍使用Java正则表达式匹配和替换HTML的内容,作者介绍了两种方法,一种用于替换链接地址,一种用于替换图片。
从前了解过JavaScript的正则表达式,知道其功用的强壮,关于处理文本比用一般的API处理不论从功率上仍是从功用上都有很大的优势。今日项目要求用到Java的正则表达式,所以在网上Google,找到一个Jakarta ORO的库,听说是Java中功用***大的正则表达式库,的确也如此,Sun公司的JDK里自带的正则表达式功用是远远不如ORO库,从正则表达式的角度上看,其比一般的API处理文本是杂乱许多。
但假如使用得恰当的话,会进步工程的质量,所以项目中就使用了这个ORO库,把浏览器恳求得到的HTML页面进行解说替换完成一个署理收集信息的功用。感觉自己好像是在开发软件,不是在规划网页。正则表达式有一个很好用的东西--RegexBuddy,使用这个东西能够调度一个匹配你需求的正则表达式串,通过几番调度,把一些HTML标签的正则表达式匹配出来。
***:像网页链接<a .......... href="[url1]" .......>之间的内容中[URL[肯定地址替换成相对地址,首先要查找匹配这个链接,查找匹配这个串的正则表达式串为
(<]\\s*){0,})href\\s*=\\s*(\"|'|)([^\\2\\s>]*)\\2((?:\\s*[^\\s>]){0,}\\s">\\s*a\\s+(?:[^\\s>]\\s*){0,})href\\s*=\\s*(\"|'|)([^\\2\\s>]*)\\2((?:\\s*[^\\s>]){0,}\\s *>)
- //查找匹配的代码如下:
- StringpatternStrs="(<\\s*a\\s+(?:[^\\s>]\\s*){0,})href\\s*=\\s*
(\"|'|)([^\\2\\s>]*)\\2((?:\\s*[^\\s>]){0,}\\s*>)";- PatternCompilercomplier=newPerl5Compiler();
- PatternMatchermatcher=newPerl5Matcher();
- PatternpatternForLink=complier.compile(patternStrs,
- Perl5Compiler.
- CASE_INSENSITIVE_MASK);
- PatternMatcherInputinput=newPatternMatcherInput(htmlContent);
- while(matcher.contains(input,patternForLink)){
- MatchResultmatch=matcher.getMatch();
- //处理匹配的成果,是要替换仍是要其他处理
- }
第二:对其他的标签也相似只要把匹配的字符串改一下为要匹配的标签就能够了。(如IMG标签)
(<\s*img\s+(?:[^\s>]\s*){0,})src\s*=\s*("|'|)([^\2\s>]*)\2((?:\s*[^\s>]){0,}\s*>),这样就能够处理
<img.....................src="[url]"...............>的标签匹配,对其他的标签也相同.
总结:关于很多要处理的文本,主张仍是用到正则表达式,而要处理的文本比较少时,用一般的字符串API处理函数就足够了。
【修改引荐】
- Java正则表达式的解说阐明
- JAVA正则表达式4种常用的功用
- Java正则表达式之group()
- Java正则表达式入门
- Java正则表达式初学者使用法简介