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;用于创建静态、动…

Node.js中的pipe方法:深入解析与应用指南

在Node.js中&#xff0c;pipe方法是处理流&#xff08;Stream&#xff09;数据的一种非常高效的方式。它允许你将一个可读流&#xff08;Readable Stream&#xff09;的数据直接传输到一个可写流&#xff08;Writable Stream&#xff09;中&#xff0c;而无需手动编写读取和写入…

3、springboot时代背景

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

怎样更改电脑的MAC地址?

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

wpf UniformGrid 动态加载数据

在WPF中&#xff0c;如果你想要在UniformGrid内部为每个Model对象放置一个Panel&#xff08;比如StackPanel或Grid&#xff09;&#xff0c;并且这些Panel是通过数据绑定动态生成的&#xff0c;你需要结合使用ItemsControl、DataTemplate以及UniformGrid。但是&#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;如果有人…

[CLIP-VIT-L + Qwen] 多模态大模型源码阅读 - 语言模型篇(2)

多模态学习笔记-语言模型篇&#xff08;2&#xff09; 参考repo:WatchTower-Liu/VLM-learning; url:vlm-learning 吐槽 今天的源码看的欲仙欲死&#xff0c;NTK(neural tangent kernel), rotary_position_embedding这些在之前的学习中完全闻所未闻&#xff0c;导致看的时候一…

红黑树、B+Tree、B—Tree

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

如何简单判断某个port是否被防火墙block

在存储系统中经常遇到要上传一些code到存储中做升级&#xff0c;但是通过客户网络死活搞不定的情况&#xff0c;其实很多时候是由于客户内部有防火墙的设置&#xff0c;某些端口是被block屏蔽的。本文就介绍几个命令用来快速判断是否这些port被客户做了block。如果确认是被bloc…

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;…

Code Practice Journal | Day52_Graph03

KamaCoder 101. 孤岛的总面积 题目&#xff1a;101. 孤岛的总面积 (kamacoder.com) 题解&#xff1a;代码随想录 (programmercarl.com) solution namespace ACMModeExample {class Program{static void Main(string[] args){// 读取矩阵的行数和列数string[] dimensions Cons…

[Matsim]Matsim学习笔记-population.xml的创建

学习需求 在利用matsim实现交通模拟时&#xff0c;需要把模拟的乘客出行数据替换成自己的&#xff0c;如何进行替换呢&#xff1f; 带着这个问题&#xff0c;调研学习matsim&#xff0c;实现population.xml的生成 调研笔记 幸运的发现matsim中实现了很多的writer工具类&#xf…

unity 使用Sqlite报错

Fallback handler could not load library C:/Users/Administrator/Desktop/xxx /_Data/MonoBleedingEdge/sqlite3&#xff0c; 出现DllNotFoundException: sqlite3 assembly:<unknown assembly> type:<unknown type> member:(null) 解决方法 &#xff1a;下载一个…

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

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