【正则表达式】粗浅学习

文章目录

  • 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点分格式的文本,如果用上面去掉开头^和结尾$,有的时候匹配的情况的结果可能会存在截断的效果,从日志分析上看,还不如下面这个短的方式来的方便。
但是,
要注意,不是所有的地方都会支持各种特殊简写的方式,比如:
简单的[0-9] 不是所有地方都支持\d的简写方式,实际应用的时候要注意识别,避免出错。

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

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

相关文章

面试系列-分组Tire树匹配算法

自己写的分组Tire树匹配算法,该算法用于云南省人工智能重点实验室与云南电网合作项目(云南电网敏感信息识别系统),用于快速匹配文本将项目中数据算法抽离出来,特此分享!!!可以实现动态的插入、删…

NVIDIA Hopper 架构深入

在 2022 年 NVIDIA GTC 主题演讲中,NVIDIA 首席执行官黄仁勋介绍了基于全新 NVIDIA Hopper GPU 架构的全新 NVIDIA H100 Tensor Core GPU。 文章目录 前言一、NVIDIA H100 Tensor Core GPU 简介二、NVIDIA H100 GPU 主要功能概述1. 新的流式多处理器 (SM) 具有许多性能和效率…

leetcode58:最后一个单词的长度

给你一个字符串 s,由若干单词组成,单词前后用一些空格字符隔开。返回字符串中 最后一个 单词的长度。 单词 是指仅由字母组成、不包含任何空格字符的最大 子字符串 。 示例 1: 输入:s "Hello World" 输出&#xff…

浅谈汽车智能座舱如何实现多通道音频

一、引言 随着汽车智能座舱的功能迭代发展,传统的 4 通道、6 通道、8 通道等音响系统难以在满足驾驶场景的需求,未来对于智能座舱音频质量和通道数会越来越高。接下来本文将浅析目前智能座舱如何实现音频功放,以及如何实现多路音频功放方案。…

iOS 多次获取图片主题色不一样

一个需求中,要求获取图片的主题色 代码如下 -(void)kk_getImage:(UIImage *)image fetchthemeColor:(void(^)(UIColor *color))callBack {dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{// 第一步 先把图片缩小 加快计算速度.…

C语言文件操作(上)(27)

文章目录 前言一、为什么要用文件?二、什么是文件?程序文件数据文件文件名文件类型文件缓冲区文件指针 三、流流的概念标准流 总结 前言 C语言可以直接操作文件,如果你是第一次听说这个特性,可能会眼前一亮,感到惊奇  …

MongoDB的安装与增删改查基本操作

MongoDB是一种非关系型数据库,是NoSQL语言,但是又是最接近关系型数据库的。内部存储不是表结构,但是可以对数据进行表结构的操作。 一、安装 在官网:Download MongoDB Community Server | MongoDB下载系统对应的版本进行安装即可 二、编辑器 在安装MongoDB后会自带一个编…

图片格式入门

主要参考资料: 常见的图片格式介绍: https://blog.csdn.net/cnds123/article/details/127165291 目录 像素图与矢量图像素图(pixel image)矢量图(Vector graphics) 像素图与矢量图 像素图(pixel image&…

D3.js中国地图可视化

1、项目介绍 该项目来自Github,基于D3.js中国地图可视化。 D3.js is a JavaScript library for manipulating documents based on data. It uses HTML, SVG, and CSS to display data. The full name of D3 is "Data-Driven Documents," which means it a…

Spring Boot项目使用MyBatis Plus的详细步骤

在Spring Boot项目中使用MyBatis Plus,可以极大地简化数据库操作,提高开发效率。以下是在Spring Boot项目中集成和使用MyBatis Plus的详细步骤: 一、环境准备 确保已安装Java和Spring Boot:MyBatis Plus是基于Java和Spring Boot…

话术挂断之后是否处理事件

文章目录 前言联系我们解决方案方案一方案二 前言 流程:自动外呼进入机器人话术。问题:在机器人放音时用户挂断后,话术还会继续匹配流程,如果匹配上的是放音节点,还会进行放音,那么在数据库表conversation…

Redis 缓存策略详解:提升性能的四种常见模式

在现代分布式系统中,缓存是提升性能和减轻数据库负载的关键组件。Redis 作为一种高性能的内存数据库,被广泛应用于缓存层。本文将深入探讨几种常用的 Redis 缓存策略,包括旁路缓存模式(Cache-Aside Pattern)、读穿透模…

windows中C++调用dll文件的两种方式,QT QLibrary和Windows API

假设DLL文件名为 test.dll&#xff0c;函数 int add(int a.int b) 1.使用Windows API 的方式 #include <windows.h>extern "C" __declspec(dllexport) int add(int a, int b); // 定义函数typedef int (*AddFunction)(int, int); // 定义函数指针类型HMODULE …

阿里云 SAE Web:百毫秒高弹性的实时事件中心的架构和挑战

作者&#xff1a;胡志广(独鳌) 背景 Serverless 应用引擎 SAE 事件中心主要面向早期的 SAE 控制台只有针对于应用维度的事件&#xff0c;这个事件是 K8s 原生的事件&#xff0c;其实绝大多数的用户并不会关心&#xff0c;同时也可能看不懂。而事件中心&#xff0c;是希望能够…

SpringBoot MyBatis连接数据库设置了encoding=utf-8还是不能用中文来查询

properties的MySQL连接时已经指定了字符编码格式&#xff1a; url: jdbc:mysql://localhost:3306/sky_take_out?useUnicodetrue&characterEncodingutf-8使用MyBatis查询&#xff0c;带有中文参数&#xff0c;查询出的内容为空。 执行的语句为&#xff1a; <select id&…

一个月冲刺软考——病毒与木马的了解、认证与加密、加密技术的分类

目录 1.计算机病毒与木马 2.加密方式的分类及特点 3.选择路由的策略 4.DoS攻击(拒绝服务) 5.认证与加密 6.报文摘要算法 7.网络攻击的类别 8.安全的分类及举例 9.加密技术的分类 10.什么是PKI体制&#xff1f;有哪些步骤&#xff1f; 1.计算机病毒与木马 1.1病毒&am…

Tensorflow2.0

Tensorflow2.0 有深度学习基础的建议直接看class3 class1 介绍 人工智能3学派 行为主义:基于控制论&#xff0c;构建感知-动作控制系统。(控制论&#xff0c;如平衡、行走、避障等自适应控制系统) 符号主义:基于算数逻辑表达式&#xff0c;求解问题时先把问题描述为表达式…

开源跨平台三维模型轻量化软件osgGISPlugins-1、简介

下一篇文章&#xff1a;开源跨平台三维模型轻量化软件osgGISPlugins-2、如何编译 1、仓库地址 github地址&#xff1a;https://github.com/newpeople123/osgGISPlugins gitee地址&#xff1a;https://gitee.com/wtyhz/osg-gis-plugins 2、项目简介 osg引擎的gis插件&#x…

【Kubernetes】常见面试题汇总(五十三)

目录 118. pod 状态为 ErrlmagePull &#xff1f; 119.探测存活 pod 状态为 CrashLoopBackOff &#xff1f; 特别说明&#xff1a; 题目 1-68 属于【Kubernetes】的常规概念题&#xff0c;即 “ 汇总&#xff08;一&#xff09;~&#xff08;二十二&#xff09;” 。…

使用NumPy进行线性代数的快速指南

介绍 NumPy 是 Python 中用于数值计算的基础包。它提供了处理数组和矩阵的高效操作&#xff0c;这对于数据分析和科学计算至关重要。在本指南中&#xff0c;我们将探讨 NumPy 中可用的一些基本线性代数操作&#xff0c;展示如何通过运算符重载和内置函数执行这些操作。 元素级…