Java个人实践-正则表达式

一,语法

语法解释
[ABC]匹配 [ ] 里面的字符a
[^ABC]匹配去除 [ ] 里面字符的剩余字符在这里插入图片描述
[A-Z]匹配按26个字母顺序区分匹配A-Z的字符在这里插入图片描述
\f匹配换页符
\n匹配换 hang 符
\r匹配回车符(还不知道这个回车符是啥)
\t匹配制表符
\v匹配垂直制表符
\s匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]在这里插入图片描述
\S匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。在这里插入图片描述
\w匹配字母、数字、下划线。等价于 [A-Za-z0-9_] (注意后面的下划线)在这里插入图片描述
^匹配输入字符串的开始位置(匹配的必须是整段第一个,在这里如果写成^P则匹配不到,明白了吧,注意:这个正则表达式没在[ ]里)在这里插入图片描述
$匹配整段话的最后一个在这里插入图片描述
{,}表示限定前面字符的出现次数在这里插入图片描述
.匹配除换行符 \n 之外的任何单字符在这里插入图片描述
*匹配前面字符出现0次或多次。等价于{0,}在这里插入图片描述
+出现1次或多次。等价于{1,}在这里插入图片描述
这个有两个含义:
1. 一个是前面字符出现0次或一次。等价于{0,1}.
2. 表示非贪婪模式(下面会演示什么是非贪婪模式)在这里插入图片描述

二,贪婪模式和非贪婪模式

1,贪婪模式

解释:贪婪模式就是找到符合所写正则表达式的最大的一段字符。
演示:在这里插入图片描述

2,非贪婪模式

解释:符合正则表达式中,最小的一段字符串
演示:在这里插入图片描述
再加一个图方便理解
在这里插入图片描述

三,正则表达式简单实战

爬取 https://www.qq.com/?fromdefault 的超链接

1,演示

在这里插入图片描述
用到的第一个正则表达式:http[\s\S]+?"
在这里插入图片描述
用到的第二个正则表达式:>[\S]*?<
在这里插入图片描述

2,代码区
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.nio.charset.Charset;
import java.util.regex.Matcher;
import java.util.regex.Pattern;


public class text03_pachong {
public static void main(String[] args) {
	text03_pachong t1 = new text03_pachong();
	String str = t1.getURLContent("https://www.qq.com/?fromdefault","gb2312");
	Pattern p = Pattern.compile("<a[\\s\\S]+?</a>");
	Matcher m = p.matcher(str);
	Pattern p1 = Pattern.compile("http[\\s\\S]+?\"");
	Matcher m1;
	Pattern p2 = Pattern.compile(">[\\S]*?<");
	Matcher m2;
	while(m.find()) {
		m1 = p1.matcher(m.group());
		m2 = p2.matcher(m.group());
		if(m1.find()) {
			if(m2.find()) {
				if(!m2.group().equals("><"))
					System.out.println(m1.group().substring(0,m1.group().length()-1)+"-----"+m2.group().substring(1,m2.group().length()-1));
			}
		}
		
	}
}
public String getURLContent(String urlStr,String charset) {
	StringBuilder sb=new StringBuilder();
	Pattern p1 = Pattern.compile("http[\\s\\S]+?\"");
	Pattern p2 = Pattern.compile(">[\\S]*?<");
	try {
		URL url = new URL(urlStr);
		BufferedReader reader = new BufferedReader(new InputStreamReader(url.openStream(),Charset.forName(charset)));
		String temp = "";
		while((temp=reader.readLine())!=null) {
			sb.append(temp);
		}
	} catch (MalformedURLException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}catch (IOException e) {
		// TODO: handle exception
	}
	return sb.toString();
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值