最近在工作中需要读取字符串中的超链接,本来是想通过获取字符串中的"<"、">"来辨别超链接,但是随着考虑的场景越全面,越发觉得自己的想法很蠢,只好求助于正则表达式(其实正则表达式是一个我一直不想接触的东东,感觉太复杂了,但它的确很强大,这一次硬着头皮学习了解了一下)。
首先看下字符串中的超链接是什么样的?
1,跳转到网址:
<a href="www.baidu.com">百度一下,你就知道</a>
2.打电话:
<a href="tel:10086">10086</a>
3.短信
<a href="sms:10086">给10086发短信</a>
<a href="sms:10086?body=cxye">给 10086 发送内容为"cxye"的短信</a><br />
<a href="sms:10086,10010?body=cxye">给 10086 和 10010 发送内容为"cxye"的短信</a>
4.邮件
<a href="mailto:test1@163.com">mail</a>
<a href="mailto:test1@163.com,test2@163.com">mail</a>
代码实现
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class PatternTest {
static String content = "<a href=\"www.baidu.com\">百度一下,你就知道</a>";
static String pattern = "<[Aa]\\s+href\\s*=\\s*['\"](.+?)['\"]>(.+?)</[Aa]>";
public static void main(String[] args) {
Pattern p = Pattern.compile(pattern);
Matcher m = p.matcher(content);
while(m.find()) {
System.out.println("gourp0 : " + m.group(0) + " group1 : " + m.group(1) + " group2 : " + m.group(2));
}
}
}
打印内容:
gourp0 : <a href="www.baidu.com">百度一下,你就知道</a> group1 : www.baidu.com group2 : 百度一下,你就知道