(急)如何用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代表第三个捕获组匹配的内容(第二个捕获组别我用其他内容替换掉了). 展开
什么样的表达式能够捕获这样的超链接啊, 尤其是表达式能适用单引号和双引号(引号是成对出现的).
最核心的是我想看看怎么能兼容的匹配单引号和双引号.
下边是我的代码 ,放在 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代表第三个捕获组匹配的内容(第二个捕获组别我用其他内容替换掉了). 展开
2个回答
展开全部
试一下,看看是不是你想要的内容。
----------------------------------------------------------------------------------
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());
}
}
}
----------------------------------------------------------------------------------
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());
}
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询