9 正则表达式:Java爬虫和正则表达式、String中的正则表达式方法(基本语法7)

文章目录

  • 前言
  • 一、正则表达式
    • 1 [ ] 语法
      • (1)[ABC] 和 [^ABC]
      • (2)[A-Z]和[a-zA-Z]
      • 小总结
    • 2 特殊字符语法(\w 这些)
    • 3 数量符
    • 4 \ 、()、 |
    • 5 锚点 ^ 和 $,\b,\B
    • 6 (?i) : 忽略其后面的大小写 ---- 这个Java是可以的,其他语言我不知道(正则表达式虽然大多通用,但也有部分是各语言独有的)
    • 7 一个完美匹配各种邮箱的应用
  • 二、Java String里面的正则表达式练习
    • 1 public boolean matches(String regex) : 判断此字符串是否与给定的 正则表达式 匹配。
    • 2 正则表达式练习
    • 3 正则表达式插件 any-rule
  • 三、爬虫、带条件爬取和懒惰匹配、贪婪匹配
    • 1 本地爬虫
    • 2 网络爬虫
    • 3 带条件爬取和贪婪爬取
      • (1)带条件爬取 :(?=exp)、(?!exp)、(?:exp)
      • (2) 非贪婪爬取与贪婪爬取:+?、*?
  • 四、 String 里面的正则表达式方法
    • 1 public boolean matches(String regex): 判断此字符串是否与给定的 正则表达式 匹配。
    • 2 public String replaceAll(String regex, String replacement):用给定的替换替换此字符串中与给定的 正则表达式 匹配的每个子字符串。
    • 3 public String[] split(String regex) : 围绕给定 正则表达式 的匹配项拆分此字符串。
  • 五、捕获分组与非捕获分组
    • 1 分组 :()
    • 2 捕获分组:\1(内部用)、$1(外部用)
    • 3 非捕获分组 :(?:正则)、(?= 正则)、(?!正则)
  • 六、总结


前言

没错,Java也是可以进行爬虫的,正则表达式所有语言都是通用的。

一、正则表达式

正则表达式基本语法没什么好说的,下面给出几个学习网站
正则表达式语法
正则表达式备忘清单,在线练习
正则表达式在线工具

正则表达式博客这篇博客我看访问量很大

下面我们只给出一下最基本的,最好能记住的

1 [ ] 语法

(1)[ABC] 和 [^ABC]

  • [ABC]:匹配 […] 中的所有字符
    例如 [aeiou] 匹配字符串 “google runoob taobao” 中所有的 e o u a 字母。
    在这里插入图片描述
  • [^ABC] : 匹配除了 […] 中字符的所有字符
    例如 [^aeiou] 匹配字符串 “google runoob taobao” 中除了 e o u a 字母的所有字符。例如 [^aeiou] 匹配字符串 “google runoob taobao” 中除了 e o u a 字母的所有字符。
    在这里插入图片描述

(2)[A-Z]和[a-zA-Z]

  • [A-Z] 表示一个区间,匹配所有大写字母,[a-z] 表示所有小写字母。
    在这里插入图片描述
  • 推广[a-zA-Z] 表示 ,匹配所有大写字母和小写字母
    例如[a-zA-Z0-9_-] 表示字符集,包含小写字母、大写字母、数字、下划线和连接字符 -

小总结

可以看到上述(1)(2)是可以结合在一起灵活应用的

2 特殊字符语法(\w 这些)

  • (1) . 点 :匹配除换行符(\n、\r)之外的任何单个字符,相等于 [^\n\r]。
    在这里插入图片描述

  • (2)\w :匹配字母、数字、下划线。等价于 [A-Za-z0-9_]
    在这里插入图片描述

  • (3)\W : 匹配除字母、数字和下划线之外的任意字符。等价于[^\w]

  • (4)\d :匹配任意一个阿拉伯数字(0 到 9)。等价于 [0-9]
    在这里插入图片描述

  • (5)\D : 匹配除数字外的任意字符。等价于[^0-9]

  • (6)\s : 匹配所有空白符(包括换行符)。等价于[\n\t\r\f\x0B]

  • (7)\S:匹配所有非空白符(不包括换行符)。等价于[^\s]

  • (8)[\s\S] : 结合起来就是匹配所有

3 数量符

  • (1)+ :匹配前面的子表达(如果用()括起来就是括号内部,没有就是+前一个字符)式一次或多次。
    例如,zo+ 能匹配 “zo” 以及 “zoo”,但不能匹配 “z”。+ 等价于 {1,}。
  • (2)* :匹配前面的子表达式零次或多次。
    例如,zo* 能匹配 “z” 以及 “zoo”。* 等价于 {0,}。
  • (3)? :匹配前面的子表达式零次或一次。
    例如,do(es)? 可以匹配 “do” 、 “does”、 “doxy” 中的 “do” 和 “does”。? 等价于 {0,1}。
  • (4){n} :n 是一个非负整数。匹配确定的 n 次。
    例如,o{2} 不能匹配 “Bob” 中的 o,但是能匹配 “food” 中的两个 o。
  • (5){n,} :n 是一个非负整数。至少匹配n 次。
    例如,o{2,} 不能匹配 “Bob” 中的 o,但能匹配 “foooood” 中的所有 o。o{1,} 等价于 o+。o{0,} 则等价于 o*。
  • (6){n,m} :m 和 n 均为非负整数,其中 n <= m。最少匹配 n 次且最多匹配 m 次。
    例如,o{1,3} 将匹配 “fooooood” 中的前三个 o。o{0,1} 等价于 o?。请注意在逗号和两个数之间不能有空格。

4 \ 、()、 |

  • (1)\ :转义符
    例如,前面说过 **.**匹配所有字母、数字和下划线,如果我只是想单纯的点呢? 那就 \.
  • (2)(): 圆括号 () 用于创建子表达式,具有高于其他运算符的优先级。
    示例:(abc)+ 匹配 “abc” 一次或多次。
  • (3)| :管道符号 | 表示"或"关系,用于在多个模式之间选择一个。
    示例:cat|dog 匹配 “cat” 或 “dog”。

5 锚点 ^ 和 $,\b,\B

  • ^ : 匹配输入字符串的开始位置,匹配字符串或行的开头。
    示例:在这里插入图片描述
  • $ : 匹配字符串或行的末尾。
    示例:在这里插入图片描述
  • \b :单词边界,匹配单词的开头或末尾。
    示例:在这里插入图片描述
  • \B: 非单词边界,匹配不在单词开头或末尾的位置。
    示例:在这里插入图片描述

6 (?i) : 忽略其后面的大小写 ---- 这个Java是可以的,其他语言我不知道(正则表达式虽然大多通用,但也有部分是各语言独有的)

这个有灵活应用,注意看下面演示,下面都以 abc 为例子给出

  • (?i)abc : 表示忽略后面所有字符的大小写匹配 ,例如,可以匹配 ABC aBC abC abc等
  • a(?i)bc:表示忽略bc的大小写匹配,例如,aBC,aBc,abc,abC
  • a((?i)b)c: 表示只忽略b的大小写,例如,aBc,abc

7 一个完美匹配各种邮箱的应用

掌握了上面哪些,基本就够用了,下面是一个完美匹配邮箱的正则表达式
在这里插入图片描述

二、Java String里面的正则表达式练习

1 public boolean matches(String regex) : 判断此字符串是否与给定的 正则表达式 匹配。

  • String regex : 正则表达式

注意:Java中的" "经常会将 \ 识别失败,python中是在 r“ ” 这样解决这个问题,但Java不能这么解决,Java只能采用 \ 替换 \ (通常路径中我们就是要这么处理), 因此我们在正则表达式中也要用 \ 来替换 \,简单来说Java中 \ = \

String s = "abc";
System.out.println(s.matches("[a-z]*"));    // true
System.out.println(s.matches("a"));         // falseString s2 = "a\\j";
System.out.println(s2.matches("a\\\\j"));   // true   两条\\ 才能匹配到一个\
System.out.println(s2.matches("[ab]"));     // falseSystem.out.println("3".matches("\\d"));     // true

下面就给出大量演示帮助进一步理解上面的正则表达式语法

// [] 只能匹配一位字符
System.out.println("----------1---------------");
System.out.println("a".matches("[abc]"));    // true
System.out.println("z".matches("[abc]"));    // false
System.out.println("ab".matches("[abc]"));     // false
System.out.println("ab".matches("[abc][abc]"));    // true// 不能出现 a b c
System.out.println("----------2---------------");
System.out.println("a".matches("[^abc]"));    // false
System.out.println("z".matches("[^abc]"));    // true
System.out.println("zz".matches("[^abc]"));     // false
System.out.println("zz".matches("[^abc][^abc]"));    // true// a到z A到Z 0到9
System.out.println("----------3---------------");
System.out.println("a".matches("[a-zA-Z]"));    // true
System.out.println("z".matches("[a-zA-Z]"));    // true
System.out.println("aa".matches("[a-zA-Z]"));     // false
System.out.println("aa".matches("[a-zA-Z][a-zA-Z]"));    // true
System.out.println("A".matches("[a-zA-Z]"));    // trueSystem.out.println("e".matches("[a-dm-p]"));    // false
System.out.println("b".matches("[a-dm-p]"));    // true
System.out.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/408048.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

zabbix5.0与7.0版本区别 切换建议

Zabbix5.0和Zabbix7.0的区别 1. 性能和扩展性优化 1.1 高效的数据处理和存储 优化的数据库性能&#xff1a; Zabbix 7.0 在数据库层面进行了多项优化&#xff0c;以减少查询延迟和提高数据处理速度。这包括对数据库结构的改进和索引优化&#xff0c;使得大规模数据的读取和写…

Spark-driver和executor启动过程

一、上下文 《Spark-SparkSubmit详细过程》详细分析了从脚本提交任务后driver是如何调用到自己编写的Spark代码的&#xff0c;而我们的Spark代码在运行前必须准备好分布式资源&#xff0c;接下来我们就分析下资源是如何分配的 二、Spark代码示例 我们以一个简单的WordCount程…

打卡学习Python爬虫第五天|Xpath解析的使用

什么是Xpath&#xff1f;是在XML文档中搜索内容的一门语言&#xff0c;HTML可以看作是xml的一个子集。 目录 1、安装lxml模块 2、导入lxml中的etree子模块 3、Xpath使用方法 3.1.选择节点 3.2.选择属性 3.3.选择文本内容 3.4.使用通配符*过滤节点 3.5.使用中括号[]索引…

Java学习_20_File以及IO流

文章目录 前言一、FileFile中常见的成员方法判断和获取创建和删除获取和遍历 二、IO流IO流体系结构字节流字节输出流&#xff1a;FileOutputStream字节输入流FileInputStrea文件拷贝try……catch异常处理中文乱码现象 字符流字符流读取FileReader字符流输出FileWriter底层原理 …

Linux 命令集合

1. linux 系统版本 1.1 linux系统的分类 linux系统&#xff0c;主要分Debian系和RedHat系&#xff0c;还有其它自由的发布版本。 1、Debian系主要有Debian&#xff0c;Ubuntu&#xff0c;Mint等及其衍生版本&#xff1b; 2、RedHat系主要有RedHat&#xff0c;Fedora&#xf…

Springsecurity 自定义AuthenticationManager

一、认证流程 1、当用户提交了一个他的凭证(用户名、密码) AbstractAuthenticationProcessingFilter 将会创建一个凭证信息&#xff0c;最终&#xff0c;该请求会被UsernamePasswordAuthenticationFilter 拦截将请求中用户名和密码&#xff0c;封装为 Authentication 对象&…

C++ | Leetcode C++题解之第365题水壶问题

题目&#xff1a; 题解&#xff1a; class Solution { public:bool canMeasureWater(int x, int y, int z) {if (x y < z) {return false;}if (x 0 || y 0) {return z 0 || x y z;}return z % gcd(x, y) 0;} };

AI大模型进化之路:机器学习九大算法画图详解

机器学习算法对于了解AI大模型的意义非常重要&#xff0c;它们是构建、训练和应用AI大模型的基础和关键。今天给大家整理了一份机器学习核心算法资料&#xff0c;建议收藏学习。 集成学习是一种机器学习算法&#xff0c;它通过构建多个模型并整合它们的预测结果来提高性能。常…

ST 表算法

ST 表 ST 表&#xff0c;主要思想是空间换时间&#xff0c;用于解决可重复贡献问题和 RMQ 问题。 可重复贡献问题 指某个运算 o p op op&#xff0c;有 x o p x x x\ op\ x\ \ x x op x x 。例如 m a x ( x , x ) x m i n ( x , x ) x g c d ( x , x ) x max(x,x)x\…

【Docker】Docker学习01 | 什么是docker?

本文首发于 ❄️慕雪的寒舍 因为本人没有学习过docker&#xff0c;虽然部署过很多镜像&#xff0c;但是对于docker底层的实现一概不知。趁学习一个新项目的契机&#xff0c;将docker的相关概念了解清楚。 安装docker的教程请查看 Linux主机安装docker。 如果你想和我一起学习do…

TCP的连接建立及报文段首部格式

粘包问题&#xff1a; 原因&#xff1a;TCP流式套接字&#xff1b;数据与数据之间没有边界&#xff1b;导致可能多次的数据粘到一起。 解决办法&#xff1a; 规定一些数据与数据之间的间隔符&#xff0c;如&#xff1a;"\aa\", "\r\n"。指定要发送的数据…

exec函数簇

一、main 函数的参数定义 在C语言中&#xff0c;main 函数是程序执行的入口点。main 函数可以接受参数&#xff0c;这些参数通常用于从命令行接收输入。main 函数的参数定义通常遵循以下形式&#xff1a; int main(int argc, char *argv[]) 或者等价地&#xff1a; int mai…

91. UE5 RPG 实现拖拽装配技能以及解除委托的绑定

在上一篇文章里&#xff0c;实现了通过选中技能&#xff0c;然后点击下方的装备技能插槽实现了技能的装配。为了丰富技能装配功能&#xff0c;在这一篇里&#xff0c;我们实现一下通过拖拽技能&#xff0c;实现拖拽功能&#xff0c;我们需要修改两个用户控件&#xff0c;一个就…

杰发科技AC7840——CAN通信简介(8)_通过波特率和时钟计算SEG_1/SEG_2/SJW/PRESC

通过公式计算 * 波特率和采样点计算公式&#xff1a;* tSeg1 (S_SEG_1 2); tSeg2 (S_SEG_2 1).* BandRate (SCR_CLK / (S_PRESC 1) / ((S_SEG_1 2) (S_SEG_2 1))), SCR_CLK 为CAN 模块源时钟* SamplePoint (tSeg1 / (tSeg1 tSeg2)). {0x0D, 0x04, 0x04, 0x3B},…

文件IO和多路复用IO

目录 前言 一、文件 I/O 1.基本文件 I/O 操作 1.1打开文件 1.2读取文件内容 (read) 1.3写入文件 (write) 1.4关闭文件 (close) 2.文件指针 二、多路复用 I/O 1.常用的多路复用 I/O 模型 1.1select 1.2poll 1.3epoll 2.使用 select、poll 和 epoll 进行简单的 I/O…

软件测试最全面试题,了解一下

一、前言 近期有不少同学&#xff0c;朋友问我什么是软件测试&#xff0c;它是干什么的&#xff0c;我适不适合做、这行发展前景、工资怎么样等等等…在这里我把问题总结一下&#xff0c;整理一篇文章出来。 我也看过很多贴吧、论坛&#xff0c;在入行之前对这块都是迷茫的&a…

数据结构----栈

一丶概念 只能在一端进行插入和删除操作的线性表&#xff08;又称为堆栈&#xff09;&#xff0c;进行插入和删除操作的一端称为栈顶&#xff0c;另一端称为栈底 二丶特点 先进后出 FILO first in last out 后进先出 LIFO last in first out 三丶顺序栈 逻辑结构&…

Nginx: 配置项之http模块connection和request的用法以及limit_conn和limit_req模块

connection和request connection 就是一个连接, TCP连接 客户端和服务器想要进行通信的话&#xff0c;有很多种方式比如说, TCP的形式或者是UDP形式的通常很多应用都是建立在这个TCP之上的所以, 客户端和服务器通信&#xff0c;使用了TCP协议的话&#xff0c;必然涉及建立TCP连…

Java JNA调用C函数常见问题及解决方法

目录 1 undefined symbol&#xff1a;xxx2 Java映射C数组乱码3 Java使用String接收不到C函数返回的char*4 Unable to load DLL xxx.dll5 java.lang.UnsatisfiedLinkError: %1 不是有效的 Win32 应用程序6 无效的ELF头7 Structure array elements must use contiguous memory8 j…

msvcp120.dll丢失是怎么回事?几种靠谱修复msvcp120.dll的方法

在使用基于Windows的计算机进行日常工作或娱乐时&#xff0c;您可能会遇到一个错误消息&#xff1a;“无法启动此程序&#xff0c;因为计算机中丢失msvcp120.dll。”这样的提示通常在尝试启动某些程序或游戏时弹出&#xff0c;导致应用无法正常运行。这个问题通常与系统中的某个…