(急)如何用java正则表达式捕获超链接,能匹配双引号或单引号.

我现在需要达到一个目标,用java的正则表达式处理一片文章中的所有的和下载相关的超链接地址,要将它们分别获取并单独做处理再替换原链接地址.我的代码在一定情况下实现了这个功... 我现在需要达到一个目标, 用java的正则表达式处理一片文章中的所有的和下载相关的超链接地址, 要将它们分别获取并单独做处理再替换原链接地址. 我的代码在一定情况下实现了这个功能. 但是问题来了, 有的超链接使用双引号,有的使用单引号 ; 有的加有样式,有的没加样式,加的样式也不经相同.

什么样的表达式能够捕获这样的超链接啊, 尤其是表达式能适用单引号和双引号(引号是成对出现的).

最核心的是我想看看怎么能兼容的匹配单引号和双引号.

下边是我的代码 ,放在 main方法中可以直接跑起来 ,希望有高手能够指点,不胜感激.
String str="<A href=\"/uploadfile/2011/9/7/20110907092541.pdf\" target=_blank>附件.pdf</A>"+
"<br>"+
"<a href='/uploadfile/2010/04/15/201004151853173151.xls' >表格</a>";
Pattern pt=Pattern.compile("(<a href=\")(.*?)(\" target=_blank>.*?</a>)",Pattern.CASE_INSENSITIVE );
StringBuffer sb=null;
sb=new StringBuffer();
Matcher m=pt.matcher(str);
while (m.find()){
System.out.println( m.group(0));
System.out.println( m.group(1));
System.out.println( m.group(2));
System.out.println( m.group(3));
m.appendReplacement(sb, "$1"+"将连接地址做处理后进行替换"+"$3");
}
m.appendTail(sb);
System.out.println(sb.toString());
我知道正则表达式学起来比较费事, 在这里讲一下我的代码,就当帮那些学习正则的人们,高手请略过此段.
在循环语句中
m.group(0) 是大捕获组 就是正则找到的一个完整超链接
m.group(1) 是第一个捕获组 就是正则中第一个圆括号匹配的内容.
m.group(2) 是第二个捕获组 就是正则中第二个圆括号匹配的内容.
....
m.appendReplacement(sb, "$1"+"将连接地址做处理后进行替换"+"$3");
这段代码是用重新拼接的内容替换原来的大捕获组. $1代表第一个捕获组匹配的内容,$3代表第三个捕获组匹配的内容(第二个捕获组别我用其他内容替换掉了).
展开
 我来答
hyjiacan
推荐于2017-12-16 · TA获得超过3912个赞
知道小有建树答主
回答量:894
采纳率:100%
帮助的人:1073万
展开全部
<a.+?href

这里使用 . 通配,? 找最小匹配,就能实现不管<a 和href间有什么内容都能匹配到了,有没有样式,相同还是不同的样式,都没问题。

单双引号的问题,可以使用 [\"\'] 这种选择模式,同时使用()括号给括起来,以便在后面引用。
追问
对头  就是引用的问题  
帮我改写一下吧
追答
(.*?)

只是,如果没有引号的话,是匹配不了的

\2 就是前面的 [\"\'] 匹配到的内容
百度网友845f74e61
2012-07-23 · TA获得超过6929个赞
知道大有可为答主
回答量:4050
采纳率:50%
帮助的人:1582万
展开全部
试一下,看看是不是你想要的内容。

----------------------------------------------------------------------------------
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Test {
public static void main(String[] args) throws Exception {
String pattern = "[<A|a]{2}[\\s>)](.*?)[</A|a>]{4}";
String str = "<A href=\"/uploadfile/2011/9/7/20110907092541.pdf\" target=_blank>附件.pdf</A>"
+ "<br>"
+ "<a href='/uploadfile/2010/04/15/201004151853173151.xls' >表格</a>";
Pattern p = Pattern.compile(pattern);
Matcher m = p.matcher(str);
while (m.find()) {
System.out.println(m.group());
}
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式