一、相关类:
java.util.regex包
-
Pattern:
- 正则表达式的编译表示形式。
- Pattern p = Pattern.compile(r,int)
-
Matcher:
- 通过解释Pattern对characher sequence执行匹配操作的引擎
- Matcher m = p.matcher(str) 匹配str字符串
二、代码示例:
一、测试正则表达式对象的基本用法:
package com.hezeu.regex;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* @Classname Demo01
* @Description 测试正则表达式对象的基本用法
* @Date 2020/3/1 上午 01:48
* @Created by 朱进博 [email protected]
*/
public class Demo01 {
public static void main(String[] args) {
Pattern p = Pattern.compile("\\w+"); //表达式对象
Matcher m1 = p.matcher("fsadfsfjkglas3412334123443"); //字符序列对象
Matcher m2 = p.matcher("fsadf&&341233443"); //字符序列对象
System.out.println(m1.matches()); //尝试整个字符序列与表达式进行匹配
System.out.println(m2.find()); //查找一个子序列,结果为true
System.out.println(m2.group()); //返回查询到的子序列,结果为fsadf
System.out.println(m2.find());
System.out.println(m2.group());
while(m2.find()){
System.out.println(m2.group()); //group()、group(0) 匹配整个表达式的子字符串
System.out.println(m2.group(0));
}
}
}
结果如下:
二、测试正则表达式中分组的处理:
package com.hezeu.regex;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* @Classname Demo02
* @Description 测试正则表达式中分组的处理
* @Date 2020/3/1 上午 10:54
* @Created by 朱进博 [email protected]
*/
public class Demo02 {
public static void main(String[] args) {
Pattern p = Pattern.compile("([a-z]+)([0-9]+)");
Matcher m = p.matcher("aa232**ssd445*sds223");
while(m.find()){
System.out.println(m.group(1));
System.out.println(m.group(2));
}
}
}
结果如下:
三、测试正则表达式替换操作:
package com.hezeu.regex;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* @Classname Demo03
* @Description 测试正则表达式替换操作
* @Date 2020/3/1 上午 10:57
* @Created by 朱进博 [email protected]
*/
public class Demo03 {
public static void main(String[] args) {
Pattern p = Pattern.compile("[0-9]");
Matcher m = p.matcher("aa232**ssd445*sds223");
//替换
String newStr = m.replaceAll("#");
System.out.println(newStr);
}
}
结果如下:
四、测试正则表达式分割字符串操作:
package com.hezeu.regex;
import java.util.Arrays;
/**
* @Classname Demo04
* @Description 测试正则表达式分割字符串操作
* @Date 2020/3/1 上午 11:01
* @Created by 朱进博 [email protected]
*/
public class Demo04 {
public static void main(String[] args) {
String str = "a232b4334c3434";
String[] arrs = str.split("\\d+");
System.out.println(Arrays.toString(arrs));
}
}
结果如下:
三、模拟网络爬虫取网页链接:
package com.hezeu.regex;
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.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* @Classname WebSpiderTest02
* @Description 封装网络爬虫(取出网站中的链接)
* @Date 2020/3/1 下午 12:58
* @Created by 朱进博 [email protected]
*/
public class WebSpiderTest02 {
public static String getUrlContent(String urlStr,String charset){
StringBuilder sb = new StringBuilder();
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) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return sb.toString();
}
public static List<String> getMatherSubstrs(String destStr,String regexStr){
Pattern p = Pattern.compile(regexStr);
Matcher m = p.matcher(destStr);
List<String> list = new ArrayList<>();
while (m.find()) {
list.add(m.group(1));
}
return list;
}
public static void main(String[] args) {
String destStr = getUrlContent("http://www.163.com","gbk");
List<String> list = getMatherSubstrs(destStr,"href=\"((https://|http://)[\\s\\S]+?)\"");
for (String src :
list) {
System.out.println(src);
}
}
}
运行结果如下: