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.mzph.cn/bicheng/52424.shtml

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

相关文章

视频检索技术为电子商务直播领域带来了前所未有的革新

视频检测在这个场景中指的是通过视频流实时识别和检索直播中销售人员展示的商品。这涉及到从连续的视频帧中分析和识别商品的视觉内容&#xff0c;通常与语音和文本数据结合&#xff0c;以提高识别准确性。 技术原理 文本引导的注意机制&#xff1a;这一机制通过直播中销售人员…

Prometheus学习

监控架构介绍&#xff1a; 基本架构&#xff1a; Prometheus 和 Zabbix 的对比&#xff1a; 安装和使用&#xff1a; Prometheus 采集、存储数据Grafana 用于图表展示alertmanager 用于接收 Prometheus 发送的警告信息node-exporter 用于收集操作系统和硬件信息的 metrics …

猫头虎 分享:Python库 Matplotlib 的简介、安装、用法详解入门教程

&#x1f42f; 猫头虎 分享&#xff1a;Python库 Matplotlib 的简介、安装、用法详解入门教程 今天猫头虎 带大家一起探索一个非常重要的 Python 库——Matplotlib。这是一个强大的工具&#xff0c;广泛应用于数据科学、人工智能和机器学习等领域&#xff0c;用于创建静态、动…

3、springboot时代背景

一、微服务 二、分布式 三、云原生 原生应用如何上云。 Cloud Native 上云的困难 服务自愈弹性伸缩服务隔离自动化部署灰度发布流量治理...... 上云的解决

怎样更改电脑的MAC地址?

怎样更改电脑的MAC地址&#xff1f; 电脑的机器码是可以修改的。 操作步骤&#xff1a; 1、通过按WINR键&#xff0c;调来电脑的接运行窗口&#xff0c;打开CMD命令来查看机器码。 2、命令提示符窗口里输入ipconfig /all&#xff0c;回车&#xff0c;即可显示出当前电脑的网…

调试理解 NodeJS 模块机制

前言 通过断点调试理解 NodeJS & CommonJS 的模块机制&#xff0c;先说结论&#xff1a; NodeJS 中每个文件视作一个模块&#xff0c;每个模块默认可以访问 module、exports、require、__filename、__dirname 变量NodeJS 中通过将模块源码包裹在 Wrapper 函数中&#xff…

【每日一题】【素数筛板子题】又是一年毕业季 牛客小白月赛99 D题 C++

牛客小白月赛99 D题 又是一年毕业季 题目背景 牛客小白月赛99 题目描述 样例 #1 样例输入 #1 3 4 2 4 6 5 5 6 2 5 3 2333333 8 11 4 5 14 19 19 8 10样例输出 #1 3 7 2做题思路 首先观察到 即需要保证拍照的时刻 大于等于 2 那么就从2开始往上走&#xff0c;如果有人…

红黑树、B+Tree、B—Tree

红黑树 B-Tree 这三个通常都是把内存全部加载到内存里&#xff0c;然后再内存中进行处理的&#xff0c;数据量通常不会很大。 内存一般容量都在GB级别&#xff0c;比如说现在常见的4G、8G或者16G。 如果要处理的数据规模非常大&#xff0c;大到内存根本存不下的时候。这个时候…

Spring Boot 集成 swagger 3.0 指南

Spring Boot 集成 swagger 3.0 指南 一、Swagger介绍1.springfox-swagger 22.SpringFox 3.0.0 发布 二、Spring Boot 集成 swagger 3.01. 添加Maven依赖2. 创建配置类配置Swagger2.1 创建SwaggerConfig 配置类2.1 创建TestInfoConfig信息配置类 3. 在你的Controller上添加swagg…

【思源笔记】思源笔记配置S3同步

本文首发于 ❄️慕雪的寒舍 文章目录 1. 写在前面2. 什么是思源笔记的S3/WEBDAV同步&#xff1f;2.1. 说明2.2. 思源的同步配置和工作空间2.3. 什么是S3协议&#xff1f; 3. 配置思源S3同步3.1. 初始化数据仓库密钥3.2. 思源S3同步界面3.3. 配置七牛云KODO3.4. 如何将同步配置导…

以GD32F103C8T6为例的核心板原理图PCB绘制学习笔记简单总结

目录 GD32F103C8T6核心板 设计流程 基础知识 部分原理图解析 排针连接 (H1 - PZ254V-12-8P): 晶振 封装 基础知识 C0603封装 C0805 F1210封装 保险丝 L0603 贴片电感 LED-0603 R0603 HDR-TH_8P-P2.54-V-M-R2-C4-S2.54 排针 按键&#xff08;SW-SMD-T6X…

Python(PyTorch)物理变化可微分神经算法

&#x1f3af;要点 &#x1f3af;使用受控物理变换序列实现可训练分层物理计算 | &#x1f3af;多模机械振荡、非线性电子振荡器和光学二次谐波生成神经算法验证 | &#x1f3af;训练输入数据&#xff0c;物理系统变换产生输出和可微分数字模型估计损失的梯度 | &#x1f3af;…

Nacos微服务注册管理中心与服务通信

参照springboot-alibaba-ribbon项目学习 E:\Codes\Idea_java_works\apesource\springboot\微服务\springboot_alibaba_ribbon Nacos 微服务注册中心-discover Nacos 是⼀个更易于构建云原⽣应⽤的动态服务发现、配置管理和服务管理平台。简单来说 Nacos 就是 注册中⼼ 配置…

Java入门:06.Java中的方法--进阶02.03

2 可变参数 方法调用时&#xff0c; 传递的实参数量&#xff0c;是由被调用方法的参数列表数列决定的。 一般来讲&#xff0c;传递的实参数量必须与形参变量数量相同&#xff0c;但是也有一种特殊的参数&#xff0c;允许调用时传递的实参数量是可变&#xff0c;这种参数就称为…

CSS3多行多栏布局

当前布局由6个等宽行组成&#xff0c;其中第四行有三栏&#xff0c;第五行有四栏。 重点第四行设置&#xff1a; 代码&#xff1a; <!DOCTYPE html> <html><head><meta charset"utf-8"><title></title><style>img {hei…

AI 时代的编程革命:如何在挑战中抓住机遇?

AI 发展对软件开发的挑战与机遇&#xff1a;程序员应对策略 随着人工智能&#xff08;AI&#xff09;技术的快速进步&#xff0c;软件开发领域正经历深刻的变革。AI 不仅改变了编程的方式&#xff0c;也对程序员的职业发展产生了重要影响。在这个背景下&#xff0c;我们既看到…

HTML5休闲小游戏《砖块破坏者》源码,引流、刷广告利器

HTML5休闲小游戏《砖块破坏者》源码&#xff0c;直接把源码上传到服务器就能使用了&#xff01; 下载链接&#xff1a;https://www.huzhan.com/code/goods468802.html

Linux:Bash中的命令介绍(简单命令、管道以及命令列表)

相关阅读 Linuxhttps://blog.csdn.net/weixin_45791458/category_12234591.html?spm1001.2014.3001.5482 在Bash中&#xff0c;命令执行的方式可以分为简单命令、管道和命令列表组成。这些结构提供了强大的工具&#xff0c;允许用户组合命令并精确控制其执行方式。以下是对这…

2024年【电气试验】找解析及电气试验模拟考试

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 电气试验找解析根据新电气试验考试大纲要求&#xff0c;安全生产模拟考试一点通将电气试验模拟考试试题进行汇编&#xff0c;组成一套电气试验全真模拟考试试题&#xff0c;学员可通过电气试验模拟考试全真模拟&#…

文件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…