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

news2024/9/22 9:52:56

文章目录

  • 前言
  • 一、正则表达式
    • 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"));         // false

String s2 = "a\\j";
System.out.println(s2.matches("a\\\\j"));   // true   两条\\ 才能匹配到一个\
System.out.println(s2.matches("[ab]"));     // false

System.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]"));    // true

System.out.println("e".matches("[a-dm-p]"));    // false
System.out.println("b".matches("[a-dm-p]"));    // true
System.out

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

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

相关文章

2018年高教社杯全国大学生数学建模竞赛(ABCD题)题目及附件

数学建模练习&#xff0c;老师发了一个2018年的C题论文&#xff0c;让我们复现&#xff0c;结果找题目附件找好长时间&#xff0c;都是泪……好在最后找到了&#xff0c;给大家分享一下。 2018年的数学建模C题不知道官网的链接打不开了已经&#xff0c;找附件找了好长时间………

第1章-03-VS Code开发工具安装

🏆作者简介,黑夜开发者,CSDN领军人物,全栈领域优质创作者✌,CSDN博客专家,阿里云社区专家博主,2023年CSDN全站百大博主。 🏆数年电商行业从业经验,历任核心研发工程师,项目技术负责人。 🏆本文已收录于专栏:Web爬虫入门与实战精讲。 🎉欢迎 👍点赞✍评论⭐收…

智能微气候:精准调控背后的算法革命

&#xff08; 于景鑫 国家农业信息化工程技术研究中心&#xff09;当人工智能遇见现代农业,会擦出怎样的火花?随着数字农业、智慧农业的蓬勃发展,人工智能技术正以前所未有的速度渗透到农业生产的方方面面。其中,以深度学习为代表的前沿算法,尤其是大语言模型(LLM),正在成为驱…

【实战教程】一键升级CentOS 7.9.2009至OpenSSL 1.0.2u:加固你的Linux服务器安全防线!

文章目录 【实战教程】一键升级CentOS 7.9.2009至OpenSSL 1.0.2u&#xff1a;加固你的Linux服务器安全防线&#xff01;一、 背景二、 升级步骤2.1 检查 OpenSSL 版本2.2 安装 OpenSSL 依赖包2.3 下载 OpenSSL 的新版本2.4 解压缩下载的文件2.5 编译并安装 OpenSSL2.5.1 切换到…

Android Forensics with Belkasoft

本课程专为需要在工作中处理 Android 设备并希望增强知识并获得 Android 获取和分析实践经验的数字取证调查员而设计。 您将学到什么&#xff1f; 如何使用Android采集的基本和高级方法&#xff0c;例如基于ADB和APK降级采集 可以使用哪些特定于芯片组的采集方法 如何分析 Andr…

Android实战:实现注册界面

目录 前言 布局图 实现过程 1.导入图片 2.创建分割线样式 3.创建文本样式 4.创建输入框样式 5.XML布局文件 测试 6.实现注册功能 前言 在前面&#xff0c;我们已经学习了一些常见的界面布局和界面控件&#xff0c;那么本篇我们就来结合前面所学的知识&#xff0c;来…

导入导出常见的空指针异常NULLPointException

使用row.getCell()方法去判断是否为空 若不为空再获取 不确定excel文件里的单元格类型 可以使用row.getCell().getCellTypeEnum() 去判断是什么类型 若要把从数据库查询出来的数据导出到excel表格中 要先判断内容是否为空

Spring Boot + MyBatis-Plus 实现 MySQL 主从复制动态数据源切换

Spring Boot MyBatis-Plus 实现 MySQL 主从复制动态数据源切换 一、前言1. 添加依赖2. 配置主从数据源3. 创建数据源配置类4. 创建数据源上下文5. 定义数据源类型6. 配置数据源切换7. 创建DynamicDataSourceConfig8. 创建DynamicRoutingDataSource9. 创建注解10. 使用注解 一、…

1.Java:集合

集合作用&#xff1a; 1.动态保存任意多个对象。 2.提供操作对象方法比如add,remove,set,get等方法。 3.使用集合添加&#xff0c;删除代码简洁。 集合分类 集合分为单列集合以及双列集合。 单列集合&#xff1a; 双列集合&#xff1a; Collection接口特点 1.Collection…

【Nginx】 Nginx Rewrite 相关功能

Nginx服务器利用 ngx_http_rewrite_module 模块解析和处理rewrite请求 此功能依靠 PCRE(perl compatible regular expression)&#xff0c;因此编译之前要安装PCRE库 rewrite是nginx服务器的重要功能之一&#xff0c;用于实现URL的重写&#xff0c;URL的重写是非常有用的功能 比…

智慧环卫与智慧城市:以人文本的创新发展之路

智慧环卫与智慧城市&#xff1a;以人文本的创新发展之路 前言智慧环卫与智慧城市 前言 智慧环卫和智慧城市的建设是当今社会发展的重要趋势&#xff0c;它们对于提升城市管理水平、改善居民生活质量具有至关重要的意义。随着国家政策对新型城市建设的大力推动&#xff0c;智慧…

学习 node.js 六 Markdown 转为 html,zlib

目录 Markdown 转为 html 安装 ejs语法 标签含义 1. 纯文本标签 2. 输出经过 HTML 转义的内容 3. 输出非转义的内容(原始内容) marked browserSync zlib gzip deflate gzip 和 deflate 区别 http请求压缩 Markdown 转为 html 什么是markdown&#xff1f; Markdo…

数据库系列之GaussDB数据库高可用部署方案

GaussDB数据库主备架构的基本组件,以及基于华为云底座和轻量化部署TPOPS两种方式的典型高可用部署场景介绍。 1、GaussDB数据库组件 1.1 GaussDB数据库集中式主备集群基本组件 CM由CM Agent、CM Server和OM monitor构成: CM Agent:管理服务组件,由OMM拉起(周期1秒),主要…

ARM32开发——PWM高级定时器

&#x1f3ac; 秋野酱&#xff1a;《个人主页》 &#x1f525; 个人专栏:《Java专栏》《Python专栏》 ⛺️心若有所向往,何惧道阻且长 文章目录 需求高级定时器通道互补输出开发流程通道配置 打开互补保护电路完整代码 需求 点亮2个灯&#xff0c;采用互补pwm的方式 高级定时…

【Unity脚本】使用脚本修改游戏对象静态属性

【知识链】Unity -> -> 脚本系统 -> 访问游戏对象 -> 静态属性【摘要】本文介绍了Unity中游戏对象的静态和动态类型&#xff0c;并说明了如何修改静态属性。 文章目录 第一章 Unity中的静与动第二章 静态和动态对象1. 静态对象&#xff08;Static Objects&#xf…

Web服务器——————nginx篇

一.What is Web服务器 Web服务器介绍 Web服务器&#xff08;Web Server&#xff09;是指驻留于因特网上某种类型计算机的程序&#xff0c;该程序可以向Web浏览器&#xff08;如Chrome、Firefox、Safari等&#xff09;等客户端提供文档&#xff0c;也可以放置网站文件&#…

4-1-3 arduino驱动直流电机(电机专项教程)

4-1-3 arduino驱动直流电机&#xff08;电机专项教程&#xff09; 4-1-3 arduino驱动直流电机XY-2.5AD电机控制模块家用直流电源改装成项目制作电源示例程序效果演示 4-1-3 arduino驱动直流电机 Arduino控制直流有刷电机的话&#xff0c;通过H桥电路实现转向控制&#xff0c;以…

C语言——预处理

C语言编译步骤 预处理 编译 汇编 链接 预处理 概念&#xff1a; 预处理就是在源文件&#xff08;如.c文件&#xff09;编译之前&#xff0c;所进行的一部分预备操作&#xff0c;这部分操作是由预处理程序自动来完成;当源文件在编译时&#xff0c;编译器会自动调用预处理程序来…

ESP32神经网络初步使用

摘要 本文档描述了如何使用Python和TensorFlow训练一个简单的神经网络模型来预测正弦函数&#xff0c;并将其部署到ESP32微控制器上。 参考文章 使用Python和Arduino在ESP32上预测正弦函数 - Dapenson - 博客园 (cnblogs.com) 最简单体验TinyML、TensorFlow Lite——ESP32跑…

Android Studio修改默认.m2与Gradle user home缓存位置

Android Studio修改默认.m2与Gradle user home缓存位置 1、修改Gradle user home的方法&#xff1a; android studio配置默认.gradle路径_android studio gradle在哪-CSDN博客文章浏览阅读2k次。当android studio新建一个项目时候&#xff0c;默认的.gradle路径均认为是在c盘的…