帮你梳理正则表达式的基础知识

C#实战:如何用Bartender 10.1实现动态打印与批量打印(附完整源码) 本文深入探讨了如何在C#项目中高效集成Bartender 10.1,实现企业级的动态打印与批量打印功能。文章提供了从环境配置、COM接口精讲、高可用打印服务类封装,到批量打印性能优化及生产环境部署的全套实战方案与源码,帮助开发者构建健壮、可维护的打印解决方案。 阅读详情

正则表达式在我们平时的工作中相当的常用,无论是写jmeter脚本,或者写自动化脚本,都可能会用到正则表达式。这篇文章主要梳理正则表达式的常用知识点,并结合一些具体的例子,让大家能掌握使用正则表达式的正确姿势,以至于有打通“任督二脉”之效。

理论知识

概念

  • 正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符串、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。
  • 正则表达式的英文是:Regular Expression,即“描述某种规则的表达式”之意。所以在很多编程语言中,都以regex、regexp等命名正则表达式模块,比如在Python中定义了re模块用于处理正则表达式。

正则表达式发展史

  • 正则表达式最早追溯至1940年代科学家对人类神经系统的工作原理的研究,使用数学方法(数学符号)来描述神经网络。当时,美国新泽西州的Warren McCulloch和出生在美国底特律的Walter Pitts这两位神经生理方面的科学家,研究出了一种用数学方式来描述神经网络的新方法,他们创新地将神经系统中的神经元描述成了小而简单的自动控制元,从而作出了一项伟大的工作革新。大家可以想象下,为啥正则表达式会起源于神经网络?
  • 随后,大名鼎鼎的Unix之父——Ken Thompson于1968年发表了文章《正则表达式搜索算法(Regular Expression Search Algorithm)》,并且将正则表达式这一符号系统引入了他自己开发的编辑器qed以及之后的编辑器ed中,然后又被移植到了大名鼎鼎的文本搜索工具grep中。自此,正则表达式被广泛应用到各种Unix系统或类Unix系统(如Mac系统、Linux系统)的工具中。
  • 由于正则表达式异常强大而实用的功能,越来越多的语言和工具引入了正则表达式。不过遗憾的是,始终没有确立正则表达式方面的标准,导致各语言与工具中的正则表达式虽然功能上大体类似,但细微差别仍然不少。于是,诞生于1986年的POSIX开始进行标准化的尝试。
  • 1988年6月,Larry Wall开发的Perl语言发布第2版,其中所引入的正则表达式引擎大放异彩。Perl 2的正则表达式引擎源于Henry Spencer编写的regex的增强版。
  • 之后,正则表达式在各种计算机语言或各种应用领域进一步得到了更为广泛而普遍的应用和发展。

功能

正则表达式的功能概括讲主要有四个:

  • 匹配给定的文本。
  • 通过正则表达式,可以提取我们期望得到的文本。
  • 替换指定的文本。
  • 根据给定的文本,将字符串切分成多个子串。

特点

正则表达式的特点,概括起来是:

  • 灵活性、逻辑性和功能性非常强。
  • 可以用非常精简的语句,来操作字符串。

因为语句的精简,所以对于很多新手来说,正则表达式会显得晦涩难懂。但是一旦你掌握它,将会大大提升你的工作效率,会让很多复杂的代码逻辑,变的精简。

正则表达式引擎

何为“引擎”?我的理解就是能驱动整个系统运转,比如汽车发动机引擎,主要部件是气缸,是整个汽车的动力源泉。同样正则表达式引擎就是能驱动实现正则表达式功能(匹配、替换、提取)的程序,目前主流的

  • NFA (Non-deterministic finite automaton) : 非确定型有穷自动机 ,以表达式为基础,遍历字符串查找匹配。使用NFA引擎的程序有:java、less、more、python、sed、vi、grep等。
  • DFA( Deterministic finite automaton ):确定型有穷自动机,以文本为基础,遍历字符串,查找匹配表达式。使用DFA引擎的程序有:awk、egrep、mysql等。

可能大家会觉得比较难理解,毕竟比较偏理论。这里和大家解释下几个关键字:

**有穷:**表示有限的意思,表示有限次数内能得到结果。

自动机:其实起的名称而已,可以理解成引擎能根据规则自动匹配,不需要人为干预。

确定型和非确定型: 假设有一个字符串(text=abc)需要匹配,在没有编写正则表达式的前提下,就直接可以确定字符匹配顺序的就是确定型,不能确定字符匹配顺序的则为非确定型。

为了更直观的让大家理解NFA和DFA,从网上爬了两种动图(来自知乎—猪哥的Python)。(https://zhuanlan.zhihu.com/p/107836267)

DFA引擎执行原理动图如下所示:
在这里插入图片描述

NFA引擎执行原理动图如下所示:

在这里插入图片描述

正则表达式的语法

正则表达式由普通字符和元字符组成,其中普通字符主要就是我们常见的字母、数字、汉字、下划线以及没有特殊含义的标点符号等。下面我帮大家归类整理了常见的特殊字符(参考了菜鸟教程(https://www.runoob.com/regexp/regexp-tutorial.html)并增加了自己的理解)。

非打印字符

字符描述
\n匹配一个换行符
\t匹配一个制表符
\r匹配一个回车符
\s匹配任何空白字符,包括空格、制表符、换页符等等
\S匹配任何非空白字符
\f匹配一个换页符
\v匹配一个垂直制表符

限定符—数量

字符描述
* 等价于 {0,}匹配前面的子表达式0次或多次
+ 等价于 {1,}匹配前面的子表达式1次或多次
? 等价于 {0,1}匹配前面的子表达式0次或1次
{n}n是一个非负整数。匹配前面的子表达式n次
{n,m}m和n均为非负整数,并且n<=m,匹配前面的子表达式至少n次最多m次
{n,}n是一个非负整数,匹配前面的子表达式至少n次

限定符主要用于对匹配内容数量的限制,注意我在上面表格中列出了三组等价关系的写法。另外这里还牵扯到一个知识点,贪婪匹配和非贪婪匹配:

  • 星号*和加号+限定符都是贪婪的,也就是他们会尽可能多的匹配文字。只需要在后面加上一个问号?就能实现非贪婪匹配或最小匹配。

举个例子, 源字符串是aaabaaab,假如正则表达式是:.b,则最终能匹配到:aaabaaab,这就是贪婪匹配。如果正则表达式加上?:.*?b*,则最终能匹配到两个aaab,相对来讲这就是非贪婪匹配。

字符集合—数字/字母/其他字符

字符描述
\d 等价于 [0-9]匹配数字0到9之间的数字
\D 等价于 [ ^0-9]匹配非数字0到9的字符
\w 等价于 [A-Za-z_0-9]匹配包括下划线的任何单词字符
\W 等价于 [ ^A-Za-z_0-9]匹配非下划线、单词字符
\s 等价于[ \f\n\r\t\v]匹配任何的非打印字符
\S 等价于[ ^\f\n\r\t\v]匹配任何的打印字符
.匹配除了\n之外的任意单个字符

需要注意在上面表格中分别列出了等价写法,主要是为了方便大家的理解和记忆。

定位符—字符边界

字符描述
^匹配输入字符串开始的位置
$匹配输入字符串结尾的位置
\b匹配一个单词边界,即字与空格间的位置
\B非单词边界匹配

^和$应该比较好理解,\b和\B表示的是单词的边界,我们后面会通过具体的例子来帮助大家理解它的含义。

选择符—分组

字符描述
(pattern)匹配pattern并获取这一匹配。所获取的匹配可以从产生的Matches集合得到
(结果会被存储起来),需要注意的是,如果要匹配括号,需要使用转义字符’(’ 或 ‘)’。
\number反向引用,可以在正则表达式中利用数字下标number引用()分组的Matchers集合的内容,比如:
源字符串是abcdebbcde,正则表达式是:([ab])\1,最终会匹配到bb。
a|b匹配字符串a或者b,是“或”的关系
(?:pattern)匹配pattern,但是并不获取匹配结果(和上面的(pattern有区别))。也就是说不将匹配结果
存储起来,供后面可以获取使用。比如:源字符串是:industry|indestries,正则表达式是industr(?:y|ies),最终能匹配到industry和indestries。
(?=pattern)正向肯定预查,在任何匹配pattern的字符串开始处匹配查找字符串,
但是不获取匹配结果,且不消耗字符串。比如:源字符串是:Windows2000,正则表达式是Windows(?=95|98|NT|2000),最终能匹配的是:windows。如果源字符串是:Windows3.1,则不能匹配。
(?!pattern)正向否定预查,在任何不匹配pattern的字符串开始处匹配查找字符串,
但是不获取匹配结果,且不消耗字符串。这个正好和(?!pattern)是相反的。比如:源字符串是:Windows3.1,正则表达式还是:Windows(?=95|98|NT|2000),则最终能匹配到字符串:Windows。
(?<=pattern)逆向肯定预查,与正向肯定预查类似,只是方向相反。比如:源字符串是:2000Windows,正则表达式是:(?<=95|98|NT|2000)Windows,能匹配到字符串Windows。同样的如果源字符串是3.1Windows,则不能匹配。
(?<!pattern)逆向否定预查,与正向否定预查类似,只是方向相反。比如:源字符串是:3.1Windows,正则表达式是:(?<=95|98|NT|2000)Windows,同样的如果源字符串是2000Windows,就无法匹配。

运算符优先级—从高到低排列

正则表达式从左到右进行计算,并遵循优先级顺序,这跟大家常见的算术表达式非常类似。相同优先级的从左到右进行运算,不同优先级的运算先高后低。下表中的优先级是从高到低排列。

字符描述
\转义字符
(), (?😃, (?=), []圆括号和方括号
*, +, ?, {n}, {n,}, {n,m}限定符
^, $, \任何元字符、任何字符定位点和序列(即:位置和顺序)
|或操作

总结

文中主要梳理了正则表达式的基础知识点,个人觉得大家完全没必要记忆,只需要在使用的时候能知道用什么即可。然后再来翻阅这篇文章中帮大家总结的知识点。

【数字IC验证进阶】正则表达式(Regular Expression)快速入门指南 在芯片开发过程中,正则表达式的使用非常常见。初次上手晦涩难懂,多用几次爱不释手! 阅读详情

相关推荐

win 11bitlocker恢复密匙一般情况的解决方式(这里指的是你现在使用的微软账户一直没有变更过)

本来没有打算写这一篇解决帖子的,但是最近好多微博的友友都在私我询问解决方法,孩子虽然很热心,但是真的回复不过来了,打字太累了,这里给大家简单指个路,希望能够对大家有所帮助。 当时出现这个问题的时候,一搜网上的解决方法都是重装系统什么的,真是吓死孩子啦。后来去微软的官网倒腾了半天解决了问题。其实只要你没有改过微软账户,你可以直接试试我这个方法,大概三到五分钟解决问题吧。 和我情况不一样的也可以参考一下贴吧里一些大佬的分享,或者实在着急我感觉去淘宝上找个解决也不是未尝不可。 出现问题: 解决方案: 直接去微软

zhiqingxue的博客 2万+

java正则表达式验证的字符,数字在某个范围内,位数固定

1.验证的字符,数字串在某个范围内,且位数固定 ^[0-9A-Za-z]{n}:表示从起始位开始后面的每一位都只能是数字和a-z的大写或小写字母,可以根据需求设置范围,{n}表示整个字符串的长度为n; ^[0-9A-Za-z]{n,}:表示整个字符串的长度最小为n 2.验证的字符串中某个位置的值为固定值,某个字符只出现一次 ^[0-9]{3}+1+[0-2]{4}:表示从起始位开始,前三位是0-...

qq_43446343的博客 4991

宝塔面板 python管理器2.0安装Mrdoc

自从python管理器从1.9升级2.0后,导致原教程不能使用。 故关于2.0新开教程如下。 关于python管理器2.0 最大的区别在于: python管理器2.0不再需要进入虚拟环境,直接在当前环境进行操作,但是需要指定python路径及pip路径。 1、新建mrdoc工程目录,下载源码: 新建目录【mrdoc】,进入mrdoc目录,并在宝塔ssh或或远程ssh中执行 ,下载源码 git clone https://gitee.com/yang_lite/MrDoc.git .

debj031634的专栏 5993

正则表达式- 只匹配长度

str.matches("^.{6,16}$");

xiaoguaihu12的博客 2万+

深入解析路科验证V0实验lab1:SV接口与时钟块实战

本文深入解析了路科验证V0实验Lab1的核心内容,重点阐述了SystemVerilog接口与时钟块在验证环境搭建中的关键作用。通过拆解router_io接口设计、时钟块同步机制及程序块封装,详细讲解了如何构建稳定可靠的验证通信基础,并提供了复位时序分析与常见调试技巧,为后续复杂验证打下坚实基础。

peach的博客 430

pcle接口详解&用途说明

它原来的名称为“3GIO”,由英特尔在2001年提出。pcel x16插槽 用途用于显卡、RAID阵列卡,向下兼容PCIE x1/x4/x8/x16。(PCIE x16插槽长89mm,有164根针脚,靠主板外侧端有一卡口,将16x分为前后两组,短插槽有22根针脚,主要用于供电,长插槽142根,主要用于数据传输,具有16通道所带来的高带宽)PCI-E x8插槽插槽用途:全长56mm,有98根针脚,与PCI-E x16比较,主要是数据针脚减少至76根,短的供电针脚仍然是22针脚。

qq_43289307的博客 1万+

Java正则表达式

Java 中正则表达式的使用 在 Java 中正则表达式为 String 类型,被验证的内容同样为 String 类型。 通过 String 类中 的 matches 方法实现内容的匹配校验。如:“被验证内容”.matches(“正则表达式”) 正则表达式语法规则:[内容限定]{长度限定}, 在定义限定内容规则时,如果没有指定长度限定,那么默认长度为 1。 单字符限定: String regex = "[a]"; String content = "a"; System.out.println(conten

y9p6p的博客 3184

LaTeX参考文献格式apsrev4-1,增加文献标题

APS的LaTeX参考文献格式apsrev4-1是隐藏标题的,如果想要出现标题,需要更改apsrev4-1.bst文件内容 在apsrev4-1.bst文件靠后部分,定义不同类型文献格式的地方,将article类型的内容替换为, FUNCTION {article} { output.bibitem format.authors booktitle empty$ { "author" output.check }{ output } if$ author format.

loading1234567的博客 5031

二十位以内的字符串包括符号正则

以下是二十位以内的字符串包括符号的正则表达式: ^.{1,20}$ 这个正则表达式表示匹配任意长度在 1 到 20 之间的字符串。 如果你想要匹配的字符串必须以字母或数字开头,可以使用以下正则表达式: ^[A-Za-z0-9].{1,19}$ ...

weixin_35750953的博客 1625

【YOLO11改进 - C3k2融合】C3k2融合动态蛇形卷积(Dynamic Snake Convolution)用于管状结构分割任务

【YOLO11改进 - C3k2融合】C3k2融合动态蛇形卷积(Dynamic Snake Convolution)用于管状结构分割任务

专注于图像领域,主要研究内容包括计算机视觉和深度学习,特别是在图像分类、目标检测和图像生成等方面有深入的研究和实践经验。 518

高质量文献综述原来这么写!借助Gemini 3 Pro+四步法,手把手教你写出有逻辑深度的综述

总结与展望先总结现状,说明前人已经做到什么地步了,再指出缺口,前人没解决什么问题、方法有什么局限等等,最后再在这个缺口的基础上,提出你的未来研究方向。当你有个复杂的研究题目,但没办法拆解出关键词,就可以让Gemini 3 Pro来辅助帮你拆解,并帮你写专业的检索式,若是找英文文献,还能帮你将中文关键词翻译成地道的专业术语。做文献笔记,可以建立文献笔记矩阵,可以用Excel建个表格,横向是文献,纵向是关键要素,包括作者/年份、研究问题/假设、理论框架/模型、研究方法/数据来源、核心结论、局限性/Gap。

智能AI让学术科研更容易 992

java正则表达式限定数字字符串长度_帮你梳理正则表达式的基础知识

正则表达式在我们平时的工作中相当的常用,无论是写jmeter脚本,或者写自动化脚本,都可能会用到正则表达式。这篇文章主要梳理正则表达式的常用知识点,并结合一些具体的例子,让大家能掌握使用正则表达式的正确姿势,以至于有打通“任督二脉”之效。理论知识概念正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符串、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用...

weixin_39827036的博客 3598

Git下载与安装

一、Git下载 二、Git安装

欢迎订阅我的“JAVA全栈开发笔记(全)”专栏,价格优惠,仅需19.9元。 6万+

正则表达式-常用语法梳理

最近,在做一些语音质检的规则配置,必不可免就需要用到正则表达式,因此,我又整理了一下,最近用得比较多的一些个语法”“ 在之前呢,我曾经因为工作需要,需要对一部分特定业务数据,提取数字部分,从而整理过一版正则表达式的基础知识 ”

qq_38294275的博客 755

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

正则表达式简单梳理一

以下为正则表达式的简单梳理,可完成一些简单的判断 <template> <view class="content"> <view class="text-area"> <text class="title">正则表达式,来检查字符串是否符合规则或将符合的规则的挑选出来</text> </view> </view> </template> <script> export defau

oneiric_origin的博客 237

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

正则表达式梳理大全

d: 匹配任何数字字符,等价于[0-9]。\D: 匹配任何非数字字符,等价于[^0-9]。\w: 匹配任何单词字符(包括字母、数字以及下划线),等价于。\W: 匹配任何非单词字符,等价于。\s: 匹配任何空白字符(包括空格、制表符、换行符等),等价于。\S: 匹配任何非空白字符,等价于。习题:A. 匹配 “The year 1992” 中的所有数字。

凌阳的博客 1038

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

正则表达式梳理(基于python)

正则表达式(regular expression)是一种针对字符串匹配查找所定义的规则模式,独立于语言,但不同语言在实现上也会存在一些细微差别,下面基于python对常用的相关内容进行梳理。

atwdy的博客 1584

Java基础知识梳理

Java基础Java基础语法面向对象基础常用API如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 Java基础语法 1、Java语言跨平台实现:依赖于JVM 2...

moyu916的博客 620

正则表达式梳理

(用户名 + @ + 域名 + . + 后缀,如 "user@example.com")(支持正负整数和小数,如 "123"、"-45.67")(支持 http/https/ftp,匹配合法网址)根据具体需求,可组合上述规则构建更复杂的正则表达式。(以 1 开头,第二位 3-9,后接 9 位数字)注意:量词默认是 “贪婪匹配”,加。(仅匹配纯中文,不包含字母、数字等)变为 “非贪婪匹配”(如。匹配最短的连续 "a")。

jialiang808的博客 768

梳理正则表达式发展史

作者:kamly,腾讯 CDC 应用开发工程师前言正则表达式在我们日常的软件开发过程中被广泛使用,例如编写 Nginx 配置文件、在 Linux 与 macOS 下查找文件,然而不同软件不...

腾讯技术工程 1410

Python正则表达式知识梳理

以上就是Python对于正则表达式的支持。熟练掌握正则表达式是每一个程序员必须具备的技能,这年头没有不与字符串打交道的程序了。

记录学习路上的一些拙见 1585

正则表达式知识梳理总结~

正则表达式 即使再小的帆,也能远航~ 一.目录 概念 特殊字符及含义 预定义字符 花括号表达式 方括号表达式 java中使用正则表达式 常用正则表达式 二.内容 概念 正则表达式就是一个用于匹配字符串的模板,可以匹配一批字符串,所以创建正则表达式就是创建一个特殊的字符串。常用于对输入的字符串做格式检验,查找,替换,例如用户名、密码等。组成正则表达式的字符在Pattern类中。 特殊字符及含义 字符 解释 \t 制表符 \n 换行符 \r 回车符 $ 匹配一行的结尾,如果要匹配

高小小天的博客 436

Ruby基础知识梳理

了解ruby,安装ruby和使用irb关于ruby(解释型语言),执行ruby文件Ruby基础知识常用基本概念和方法 puts, p 单引号”和双引号”“, 字符串嵌入,“#{abc}” 数值表示和计算 注释 运算符及优先级 对象、变量和常量 Ruby中一切皆对象 弱变量类型,局部变量,全局变量,实例变量,类变量 常量/变量命名规范,保留字 多重赋值,交换变量值,获取数组元素 条件判断 真假值,逻辑

liuk10的博客 1127

C# 正则表达式大全

转自:https://www.cnblogs.com/hehehehehe/p/6043710.html 文章导读 正则表达式的本质是使用一系列特殊字符模式,来表示某一类字符串。正则表达式无疑是处理文本最有力的工具,而.NET提供的Regex类实现了验证正则表达式的方法。Regex 类表示不可变(只读)的正则表达式。它还包含各种静态方法,允许在不显式创建其他类的实例的情况下使用...

worldy的专栏 4万+

Python 从实战中梳理基础知识:1.自动添加标签

Python实战项目:自动添加标签的初步实现,博文适合刚接触Python,会点基础知识,想立即实战的童鞋作为参考

weixin_44163765的博客 329
上一篇: 使用gitlab ci构建IOS包并发送通知消息到企业微信
下一篇: 《Python测试开发技术栈—巴哥职场进化记》—前言
布道师玄柯
布道师玄柯 领域专家: 数据科学与机器学习技术领域 领域专家: 数据科学与机器学习技术领域
博客等级 码龄15年 18粉丝 38原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值