• Java——正则表达式


    一.正则表达式

    1.概述

    正则表达式可以校验字符串是否满足一定的规则,并用来校验数据格式的合法性

    我们可以把正则表达式理解为是一种规则,这种规则就是可以用来校验字符串

    2.Pattern与Matcher

    ⑴概述

    ①Pattern类为正则表达式的编译表现形式

    ②Matcher类为Pattern对Character sequence(文本)执行匹配操作的引擎(文本匹配器)

    ⑵常见方法摘要

    ①Pattern类

    aed5c2d0524b4a959517309a607ac8f1.png 

    ②Matcher类

    c74f6f6dae2b4702851fd6b72a014725.png

    3.正则表达式的常用构造摘要

    正则表达式其实就是字符拼凑出来的规则

    ⑴字符类

    其中表示对一个字符的匹配

    aaea865b5ed74809bea1bec9c34a58dd.png

    ⑵预定义字符

    其中表示对一个字符的匹配

    ea2e10a452194e47a514c40571aa8f42.png

    反斜线字符 ('\') 用于引用转义构造,同时还用于引用其他将被解释为非转义构造的字符。因此,表达式 \\ 与单个反斜线匹配,而 \{ 与左括号匹配

    如图:若我要使用预定义字符,其中\\才表示上表的\

    5bd5f9f7fb83412cb0f36c092ba1693c.png

    ⑶数量词

    3e74a717835c4de0b5ade880cae9e571.png

    4.正则表达式的作用

    ⑴校验字符串是否满足规则

    字符串中定义了一个Matchers方法用来校验字符串是否满足给定的规则

    boolean matches(String regex)

    方法的底层就是调用的Pattern类中的marches方法

    e5199408271a40ddb88cf5c0985ac7c1.png

    ⑵在一段文本中查找满足要求的内容(爬取数据)

    如何在一段文本中查找满足要求的内容?

    第一步:写好规则(正则表达式)

    第二步:获取文本匹配器

    第三步:利用文本匹配器从头开始读取,将符合要求的内容截取

    第四步:获取截取的内容

    利用这四步思路,我们看一下如何利用代码实现

    ①本地爬取

    4aa807e5fa7e470cbc97c903fd5383e5.png

    如图:我想要获取下面文本的关键词"路飞",我们定义规则然后调用方法

    d6fe3c9302674ae68b87380321455bfc.png

     df5423726a0f4717b91efc2ead1a2c1a.png

    ②网络爬取

    网络爬取就是在本地爬取的基础上多了个读取网络内容的要求

    5e5098a340854bcfaa0fc215b764355f.png

    5.正则表达式在字符串中的使用

    37fadcdc91f940a4a0cebde94c1f299f.png

    replaceAll其中的regex是正则表达式,newStr是要替换的内容

    b8bc24c4859e4971a7d6bfd44e2cbe26.png

    6.爬虫

    ⑴贪婪爬取

    在爬取的时候尽可能的多获取数据

    Java中默认的是贪婪爬取,数量词+或*就表示贪婪爬取

    如图:我想要尽可能的多获取b

    d681b6b5049a4307b53a26e89cc2849d.png

    ⑵非贪婪爬取

    在爬取的时候尽可能的少获取数据

    在Java中默认的是贪婪爬取,如果我们在数量词+或*的后面加上问号,就表示非贪婪爬取

    4f2b895d508a4544b8a81dc409024540.png

    ⑶带条件的爬取

    带条件的爬取就是我们可以一次性爬取到不同的内容

    如:一段文本中包含"a1","a2","a3"等等关键词,我想要统计其中aX出现的个数,就可以定义正则

    a(?:1|2|3)

    8ae11f5e7481430f8a48f33d8edccdb3.png

    ecb921af1d984c299c9833ca5a9536c4.png

    7.组和捕获

    ⑴捕获分组

    捕获分组就是把这一组的数据捕获出来,再用一次

    Ⅰ.规则

    捕获组可以通过从左到右计算其开括号来编号

    规则1:从1开始连续不间断

    规则2:以左括号为基准,最左边的是第一组,其次是第二组,以此类推

    Ⅱ.组的使用

    正则内部使用:\\组号

    如图:我要判断一个字符串的开始字符与结束字符是否一致

    c0f5ce5987c144599c00072cc37c6e80.png

    正则外部使用:$组号

    如图:我要去除文本中的重复字符

    d2591cca26c34692a755786368d0559a.png

    ⑵非捕获分组

    分组之后不需要再使用本组数据,仅仅是把数据括起来

    以(?)开头的组是纯的非捕获分组,也就是我们不能再去调用该正则表达式

    上面的(?:) ,(?!)以及(?=)均是非捕获分组

     

     

     

     

     

  • 相关阅读:
    零基础学Java(12)静态字段与静态方法
    【学习笔记】ARC11123
    结构体和联合体
    Nacos升级2.2.2 相关版本升级及升级中问题【下篇】
    一日一技:用Python绘画有多好玩
    2023如何做谷歌收录?
    C++编程笔记(GPU并行编程-2)
    Vue3开发最佳实践和实用技巧(上)
    arm设备上的嵌入式开发编译环境搭建
    毕业设计-深度学习机器视觉的交通标识符识别
  • 原文地址:https://blog.csdn.net/m0_74808313/article/details/132168949