正则表达式的使用
package com.ftn.regexp;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
//演示正则表达式的使用
public class Regexp_ {
public static void main(String[] args) {
//假定,编写了爬虫,从百度页面得到如下文本
// String content = "111JDBC API主要位于JDK中的java.sql包中(之后扩展的内容位于javax.sql包中)," +
// "主要包括(斜体代表接口,需驱动程序提供者来具体实现):\n" +
// "DriverManager:负责加载各种不同驱动程序(Driver),并根据不同的请求," +
// "向调用者返回相应的数据库连接(Connection)。Driver:驱动程序," +
// "会将自身加载到DriverManager中去,并处理相应的请求并返回相应的数据库连接" +
// "(Connection)。Connection:数据库连接,负责与进行数据库间通讯," +
// "SQL执行以及事务处理都是在某个特定Connection环境中进行的。" +
// "可以产生用以执行SQL的Statement。Statement:" +
// "用以执行SQL查询和更新(针对静态SQL语句和单次执行)。PreparedStatement:" +
// "用以执行包含动态参数的SQL查询和更新(在服务器端编译,允许重复执行以提高效率)。" +
// "CallableStatement:用以调用数据库中的存储过程。SQLException:" +
// "代表在数据库连接的建立和关闭和SQL语句的执行过程中发生了例外情况(即错误)。999";
// String content = " </a></li><li><a href=\"//www.bilibili.com/v/popular/all\" target=\"_blank\"><div class=\"round orange\"><i class=\"bilifont bili-remen\"></i></div>\n" +
// " 穿越异世界,成为猫耳魔法师!\n" +
// " </p></a></div><div class=\"item\" style=\"z-index:4;\"><a data-loc-id=\"3197\" target=\"_blank\"><img src=\"https://i0.hdslb.com/bfs/sycp/creative_img/202110/1c6bb9493d605cf34dfdb82f0d0c220f.jpg@880w_388h_1c_95q\" alt=\"管它是什么,进攻就可以了\"><p class=\"title\"><i class=\"bypb-icon\"></i>\n" +
// " 管它是什么,进攻就可以了\n" +
// " </p></a></div><div class=\"item\" style=\"z-index:3;\"><a data-loc-id=\"3197\" target=\"_blank\"><img src=\"//i0.hdslb.com/bfs/feed-admin/c3ede9e61e4f142b434343d0cf6d4b212005f535.jpg@880w_388h_1c_95q\" alt=\"瘦小的湖南妹子连吃2碗!\"><p class=\"title\"><!---->\n" +
// " 瘦小的湖南妹子连吃2碗!\n" +
// " </p></a></div><div class=\"item\" style=\"z-index:2;\"><a data-loc-id=\"3197\" target=\"_blank\"><img src=\"//i0.hdslb.com/bfs/feed-admin/7962ef40e7ae1fc647bf513ea8df10cbd97146d4.jpg@880w_388h_1c_95q\" alt=\"极致废物利用!省钱收纳全部拿捏了!\"><p class=\"title\"><!---->\n" +
// " 极致废物利用!省钱收纳全部拿捏了!\n" +
// " </p></a></div><div class=\"item\" style=\"z-index:1;\"><a data-loc-id=\"3197\" target=\"_blank\"><img src=\"//i0.hdslb.com/bfs/feed-admin/8e941002ed188a9bfe3dde06466a70e1f459d8d6.png@880w_388h_1c_95q\" alt=\"准备好被“骗”了吗?\"><p class=\"title\"><!---->\n" +
// " 准备好被“骗”了吗?\n" +
// " </p></a></div></div><div class=\"trigger\"><span class=\"on\"></span><span></span><span></span><span></span><span></span></div><a href=\"//www.bilibili.com/blackboard/topic_list.html\" class=\"more\">\n" +
// " 更多";
String content = "私有地址(Private address)属于非注册地址,专门为组织机构内部使用。\n" +
"以下列出留用的内部私有地址\n" +
"A类 10.0.0.0--10.255.255.255\n" +
"B类 172.16.0.0--172.31.255.255\n" +
"C类 192.168.0.0--192.168.255.255";
//要求提取文章中所有英文单词
//要求提取文章中所有数字
//要求提取文章中所有数字及英文单词
//要求提取文章中标题
//要求提取文章中 ip 地址
//(1).传统方法,使用遍历,代码量大,效率低
//(2).正则表达式
//1.先创建一个Pattern对象,模式对象,可以理解成一个正则表达式对象
Pattern pattern = Pattern.compile("[a-zA-Z]+");
Pattern pattern1 = Pattern.compile("[0-9]+");
Pattern pattern2 = Pattern.compile("([a-zA-Z]+)|([0-9]+)");
Pattern pattern3 = Pattern.compile("alt=\"(\\S*)\"");
Pattern pattern4 = Pattern.compile("\\d+.\\d+.\\d+.\\d+");
//2.创建一个匹配器对象
//理解:就是 matcher 匹配器按照 pattern(模式/样式),到 content 文本中去匹配
//找到返回 true,否则返回 false
Matcher matcher = pattern4.matcher(content);
//3.循环匹配
while (matcher.find()){
System.out.println("找到:" + matcher.group(0));
}
}
}