正则表达式查找满足要求的内容

 

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * @author gyf
 * @ClassName MyTest
 * @Date 2024/9/2 9:46
 * @Version V1.0a
 * @Description :
 */
public class MyTest {

    public static void main(String[] args) {
        /* 有如下文本,请按照要求爬取数据。
                Java自从95年问世以来,经历了很多版本,目前企业中用的最多的是Java8和Java11,
                因为这两个是长期支持版本,下一个长期支持版本是Java17,相信在未来不久Java17也会逐渐登上历史舞台
                要求:找出里面所有的JavaXX
         */

        String str = "Java自从95年问世以来,经历了很多版本,目前企业中用的最多的是Java8和Java11," +
                "因为这两个是长期支持版本,下一个长期支持版本是Java17,相信在未来不久Java17也会逐渐登上历史舞台";

        //1.获取正则表达式的对象
        Pattern pattern = Pattern.compile("Java\\d{0,2}");
        //获取文本匹配器的对象
        //拿着m去读取str,找符合p规则的子串
        Matcher matcher = pattern.matcher(str);
        //3.利用循环获取
        while (matcher.find()){
            String group = matcher.group();
            System.out.println(group);
        }
    }
    private static void method1(String str) {
        //1.获取正则表达式的对象
        Pattern pattern = Pattern.compile("Java\\d{0,2}");
        //获取文本匹配器的对象
        //m:文本匹配器的对象
        //str:大串
        //p:规则
        //m要在str中找符合p规则的小串
        Matcher matcher = pattern.matcher(str);
        //拿着文本匹配器从头开始读取,寻找是否有满足规则的子串
        //如果没有,方法返回false
        //如果有,返回true。在底层记录子串的起始索引和结束索引+1
        boolean b = matcher.find();
        System.out.println(b);

        //方法底层会根据find方法记录的索引进行字符串的截取
        // substring(起始索引,结束索引);包头不包尾
        // (0,4)但是不包含4索引
        // 会把截取的小串进行返回。
        String s1 = matcher.group();
        System.out.println(s1);

        //第二次在调用find的时候,会继续读取后面的内容
        //读取到第二个满足要求的子串,方法会继续返回true
        //并把第二个子串的起始索引和结束索引+1,进行记录
        b = matcher.find();
        System.out.println(b);

        //第二次调用group方法的时候,会根据find方法记录的索引再次截取子串
        String s2 = matcher.group();
        System.out.println(s2);
    }
}

爬取网址中的身份证信息

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * @author gyf
 * @ClassName MyTest
 * @Date 2024/9/2 9:46
 * @Version V1.0a
 * @Description :
 */
public class MyTest {

    public static void main(String[] args) {
        /* 扩展需求2:
            把连接:https://m.sengzan.com/jiaoyu/29104.html?ivk sa=1025883i
            中所有的身份证号码都爬取出来。
        */
        try {
            //创建一个URL对象
            URL url = new URL("https://blog.csdn.net/m0_58974397/article/details/138153820?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-16-138153820-blog-134786084.235^v43^pc_blog_bottom_relevance_base5&spm=1001.2101.3001.4242.9&utm_relevant_index=19");
            //连接上这个网址
            //细节:保证网络是畅通
            URLConnection conn = url.openConnection();//创建一个对象去读取网络中的数据
            BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
            String line;
            //获取正则表达式的对象pattern
            String regex = "[1-9]\\d{17}";
            Pattern pattern = Pattern.compile(regex);//在读取的时候每次读一整行
            while ((line = br.readLine()) != null) {
                //拿着文本匹配器的对象matcher按照pattern的规则去读取当前的这一行信息
                Matcher matcher = pattern.matcher(line);
                while (matcher.find()) {
                    System.out.println(matcher.group());
                }
            }
            br.close();
        } catch (IOException e) {
            throw new RuntimeException(e);
        }

    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

XF鸭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值