Java个人实践-正则表达式
程序员文章站
2022-07-13 13:37:43
...
一,语法
语法 | 解释 |
---|---|
[ABC] | 匹配 [ ] 里面的字符 |
[^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();
}
}
上一篇: 使用PostGreSQL数据库进行text录入和text检索
下一篇: 正则表达式的个人理解与学习