【正则表达式】粗浅学习

news2024/10/3 8:21:03

文章目录

  • 1 背景介绍
    • 1.1 为什么要学习正则表达式?
    • 1.2 什么是正则表达式?
    • 1.3 正则表达式可以做什么?
  • 2 基本语法
  • 3 典型案例
    • 3.1 正整数
    • 3.2 IPv4类型的IP地址
      • 3.2.1 点分10进制表示格式

1 背景介绍

1.1 为什么要学习正则表达式?

日常学习或者其他场景中,经常会遇到针对文本文件中的内容进行查找、日志分析等,对正则表达式不了解或者不清楚,搞的比较难做。

1.2 什么是正则表达式?

正则表达式,Regular Expression,简称RE。
它表达的是一种文本模式。
它自己是一个字符串。
它是一些字符和特殊字符组成的。

1.3 正则表达式可以做什么?

反正挺有用的,知道的人都知道。几个常用的地方:
1、单个文件内查找指定模式的字符串
2、磁盘上查找文件名称匹配某个模式的文件,列出来匹配了规则的文件路径
3、和linux命令grep、sed、awk等结合使用,做到删除、替换、查找文本等常规操作。
4、和java或者shell编程实现文本的高级处理
5、其他字符串处理的场景。
总之,正则表达式的使用场景在字符串领域是应用广泛的,值得稍微花点时间学习一下。

2 基本语法

序号字符分类字符简要说明使用介绍
1普通字符[A-Z]从字符串中匹配大字母字符
2普通字符[a-z]从字符串中匹配小写字母字符
3普通字符[0-9]从字符串中匹配数字相当于\d
4普通字符[A-Za-z]从字符串中匹配所有字母字符
5普通字符[A-Za-z0-9]从字符串中匹配字母和数字
6普通字符[具体的字符集合]从字符串中匹配指定的字符集合中的字符例如:[abc123] 就是从字符串中匹配a、b、c、1、2、3的字符,但凡字符串中出现这6个字符,都判定为命中状态。
7普通字符[^具体的字符集合]非的逻辑,匹配字符串中不在指定范围内字符例如:[^A-Z]表示匹配字符串中不是大写字母的字符。
8普通字符.字符点(我很小看不清)匹配1个字符,这个字符是任意字符,但是不包括换行符(\n和\r)等效于[^\n\r]
9普通字符\d匹配数字等效于[0-9]
10普通字符\w匹配字母、数字、下划线等效于[A-Za-z0-9_]
1定位字符^正则模式字符串匹配输入字符串的开始位置,相当于是限定在开头要匹配命中。例如:^[#*],匹配开头是#或者*的字符串。
2定位字符正则模式字符串$匹配输入字符串结尾位置,相当于限定要从结尾开始匹配例如:[#*]$,匹配结尾是#或者*的字符串。
1转义字符\反斜杠字符,转义字符,把特殊意义的符号的特殊意义去除例如:\.\$ 表示的是匹配包括.$字符的字符串,而不是表示作为字符串结尾包括.的字符串。如果要匹配的是以圆点.结尾的字符串,那么正则是这样的:\.$
1元字符*该字符跟在其他字符后面的位置,表示的是匹配前面的子表达式0次或者多次,注意包括0次。也就是大于或等于0次,相当于{0,},举例:zo*,意思是匹配z字母后面跟大于等于0个o字母,包括z,zo,zoo等等。
2元字符+匹配前面子表达式大于等于1次相当于{1,}
3元字符?匹配前面子表达式0或1次相当于{0,1}
3元字符?如果?前面一些特殊字符(*, +, ?, {n}, {n,}, {n,m}) 后面时,匹配模式是非贪婪的例如:如果字符串是123456,正则表达式是\d+ ,默认是贪婪的,那么结果匹配得到123456,如果正则表达式是\d+?,此时转换为非贪婪方式的,那么结果是1、2、 3、 4、 5、 6。
4元字符{n}匹配前面子表达式n次
5元字符{n,}匹配前面子表达式>=n次
6元字符{n,m}匹配前面子表达式n~m次,包括n和m,m>=n例如:abc{1,3} 意思是匹配abc,abcabc,abcabcabc三种情况
7元字符子表达式1|子表达式2匹配子表达式1和子表达式2,例如:abc|123,表示匹配abc或者123两种情况

3 典型案例

正则表达的编写有3点需要重点注意:
第一,先确定要目标的完整定义,并针对正则表达式需要设计全量的测试用例场景;
第二,特殊字符可能会应用到普通字符场景,一定要进行转移;
第三,重新审视写完的正则表达式,进行精简。

3.1 正整数

正则表达式要达成的目标定义:
和整数一样,正整数也是一个可数的无限集合。在数论中,正整数,即1、2、3……;但在集合论和计算机科学中,自然数则通常是指非负整数,即正整数与0的集合,也可以说成是除了0以外的自然数就是正整数。正整数又可分为质数,1和合数。正整数可带正号(+),也可以不带。
具体写法:

写法1:
\+{0,1}[1-9][0-9]{1,}|\+{0,1}[1-9]
写法2:
\+?[1-9][0-9]+|\+?[1-9]
写法3:
\+?[1-9]\d+|\+?[1-9]
写法4:
\+{0,1}[1-9][0-9]{0,}
写法5:
\+?[1-9]\d*

其中涉及到转义字符、元字符? * {} 等的使用,需要特别小心。

3.2 IPv4类型的IP地址

3.2.1 点分10进制表示格式

正则表达式要达成的目标定义:
点分10进制表示格式是IP地址的标准表示方法。在这种格式中,IP地址由四个部分组成,每个部分是一个0到255之间的整数,各部分之间用点(.)分隔。例如,一个有效的IP地址可能是192.168.1.1。这种格式的优点是易于阅读和排序,同时也方便进行数学计算。每个部分代表一个8位的二进制数,因此整个IP地址可以表示一个32位的二进制数。这种格式也方便网络设备和软件进行解析和处理。
具体写法:
下面的写法是针对给定一个字符串来准确判断是否为有效IPv4地址的正则表达式:

^((25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)\.){3}(25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)$

如果只是想要简单的从日志等文本文件中抓出类似IPv4地址格式的内容,可以使用下面的正则表达式:

(\d+\.){3}(\d+)

通过这种方式可以抓全相关的类似IPv4点分格式的文本,如果用上面去掉开头^和结尾$,有的时候匹配的情况的结果可能会存在截断的效果,从日志分析上看,还不如下面这个短的方式来的方便。

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

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

相关文章

【技术详解】SpringMVC框架全面解析:从入门到精通(SpringMVC)

文章目录 【技术详解】SpringMVC框架全面解析:从入门到精通(SpringMVC)SpringMVC概述1. 三层架构与MVC架构区别1.1 三层架构1.2 MVC架构1.3前后端分离开发模式 2. SpringMVC环境搭建2.1 注解启动方式2.2 xml启动方式2.3 SpringMVC PostMan工具使用 3. SpringMVC 请求…

electron出现乱码和使用cmd出现乱码

第一种出现乱码。这种可以通过chcp 65001,设置为utf-8的编码。第二种,是执行exec的时候出现乱码,这个时候需要设置一些编码格式,可以通过iconv-lite进行解决,这个方法是node自带的,所以不需要导入。使用方法…

scrapy爬取汽车、车评数据【上】

这个爬虫我想分三期来写: ✅ 第一期写如何爬取汽车的车型信息; ✅ 第二期写如何爬取汽车的车评; ✅ 第三期写如何对车评嵌入情感分析结果,以及用简单的方法把数据插入mysql中; 技术基于scrapy框架、BERT语言模型、mysq…

【springboot】整合沙箱支付

目录 1. 配置沙箱应用环境2. 配置springboot项目1. 引入依赖2. 配置文件注册下载ngrok 3. 创建支付宝支付服务类4. 支付界面模板5. 控制类实现支付6. 测试 1. 配置沙箱应用环境 使用支付宝账号登录到开放平台控制台。 使用支付宝登录后,看到以下页面,下…

2、.Net 前端框架:OpenAuth.Net - .Net宣传系列文章

OpenAuth.Net 是一个开源的身份验证框架,由开发者 Yubaolee 创建,它旨在简化 Web 应用和服务的安全授权过程。这个框架以其强大的功能和易用性,为开发人员提供了一种高效的方式来处理用户认证和授权问题。 OpenAuth.Net 的关键特性包括&#…

无头双向不循环链表的模拟

总共由四部分组成,一个拥有总体方法名参数 的接口、一个异常类、一个方法类、一个测试类 先看我们写入的接口 public interface ILinkList {// 2、无头双向链表实现//头插法void addFirst(int val);//尾插法void addLast(int val);//任意位置插入,第一个数据节点为…

广联达 Linkworks办公OA Service.asmx接口存在信息泄露漏洞

漏洞描述 广联达科技股份有限公司以建设工程领域专业应用为核心基础支撑,提供一百余款基于“端云大数据”产品/服务,提供产业大数据、产业新金融等增值服务的数字建筑平台服务商。广联达OA存在信息泄露漏洞,由于某些接口没有鉴权&#xff0c…

Unity Input System自动生成配置

参考视频 创建及配置新输入系统 New Input System|Unity2022.2 最新教程《勇士传说》入门到进阶|4K_哔哩哔哩_bilibili ProjectSettings设置 Unity编辑器菜单栏选择Edit->Project Settings->Player->Other Settings,将Api Compatibility Level…

Ascend C 算子运行资源管理简介

Ascend C 算子运行资源管理简介 在 Ascend C 平台上开发深度学习应用时,运行资源的管理是一个核心知识点。通过合理管理算子执行中的计算资源,能够有效提升模型的执行效率和硬件利用率。本文将简要介绍 Ascend C 算子运行时的资源管理。 1. AscendCL 初…

draw.io创建自定义形状

Create custom shapes in draw.io using the text editor Reference draw怎么创建和编辑复杂的自定义形状 https://blog.csdn.net/u012028275/article/details/113828875 Create custom shapes in draw.io using the text editor

AMD发布首个AI小语言模型:6900亿token、推测解码提速3.88倍

AMD发布了自己的首个小语言模型(SLM),名为“AMD-135M”。相比于越来越庞大的大语言模型(LLM),它体积小巧,更加灵活,更有针对性,非常适合私密性、专业性很强的企业部署。 AMD-135小模型隶属于Llama家族,有两…

5分钟学会SPI

SPI 定义:SPI 是一种机制,允许用户在不修改现有代码的情况下扩展和替换特定服务的实现。它定义了一组接口(Service Interfaces)和一组实现(Service Providers),使得应用程序可以动态加载和使用…

netty之Netty与SpringBoot整合

前言 在实际的开发中,我们需要对netty服务进行更多的操作,包括;获取它的状态信息、启动/停止、对客户端用户强制下线等等,为此我们需要把netty服务加入到web系统中。 MyChannelInitializer public class MyChannelInitializer ex…

[C++]使用C++部署yolov11目标检测的tensorrt模型支持图片视频推理windows测试通过

官方框架: https://github.com/ultralytics/ultralytics yolov8官方最近推出yolov11框架,标志着目标检测又多了一个检测利器,于是尝试在windows下部署yolov11的tensorrt模型,并最终成功。 重要说明:安装环境视为最基…

边缘自适应粒子滤波(Edge-Adaptive Particle Filter)的MATLAB函数示例,以及相应的讲解

目录 讲解 初始化 预测步骤 观测模拟 权重更新 重采样 状态估计 总结 下面是一个简单的边缘自适应粒子滤波()的函数示例,以及相应的讲解。 程序源代码: function X_est edgeAdaptiveParticleFilter(numParticles, numS…

awd基础学习

一、常用防御手段 1、改ssh密码 passwd [user] 2、改数据库密码 进入数据库 mysql -uroot -proot 改密码 update mysql.user set passwordpassword(新密码) where userroot; 查看用户信息密码 select host,user,password from mysql.user; 改配置文件 (否则会宕机…

笔记整理—linux进程部分(6)进程间通信、alarm和pause

两个进程间通信可能是任何两个进程间的通信(IPC)。同一个进程是在同一块地址空间中的,在不同的函数与文件以变量进程传递,也可通过形参传递。2个不同进程处于不同的地址空间,要互相通信有难度(内存隔离的原…

2024-09-27 buildroot C和语言将 中文的GBK编码转换为 UTF-8 的代码, printf 显示出来,使用 iconv 库去实现。

一、GBK 的英文全称是 "Guobiao Kuozhan",意为 "National Standard Extended"。它是对 GB2312 编码的扩展,用于表示更多汉字和符号 GBK(国标扩展汉字编码)是一种用于简体中文和繁体中文字符的编码方式&#x…

计算机毕业设计Python+Spark知识图谱酒店推荐系统 酒店价格预测系统 酒店可视化 酒店爬虫 酒店大数据 neo4j知识图谱 深度学习 机器学习

《PythonSpark知识图谱酒店推荐系统》开题报告 一、研究背景与意义 随着互联网技术的飞速发展和人们生活水平的提高,旅游和酒店行业迎来了前所未有的发展机遇。然而,面对海量的酒店信息和多样化的用户需求,如何快速、准确地为用户推荐符合其…

【Java】—— 集合框架:List接口常用方法与List接口的实现类

目录 4. Collection子接口1:List 4.1 List接口特点 4.2 List接口方法 4.3 List接口主要实现类:ArrayList 4.4 List的实现类之二:LinkedList 4.5 List的实现类之三:Vector 4.6 练习 4. Collection子接口1:List …