正则表达式概念以及语法的使用

news2024/11/23 13:43:59

目录

1.概念

2. 为什么使用正则表达式?

3. 语法

1.普通字符

非打印字符

2. 特殊字符

3. 限定符

4. 定位符

5. 运算优先级

3.匹配规则

1. 基本模式匹配

2. 字符簇

3. 确定重复出现


1.概念

正则表达式(Regular Expression)是一种文本模式包括普通字符(例如,a 到 z 之间的字母)
和特殊字符(称为"元字符"),正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串。

2. 为什么使用正则表达式?

典型的搜索和替换操作要求您提供与预期的搜索结果匹配确切文本,虽然这种技术对于对
静态文本执行简单搜索和替换任务可能已经足够了,但它缺乏灵活性,若采用这种方法搜索
动态文本,即使不是不可能,至少也会变得很困难。

正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一
个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等

正则表达式可以灵活的匹配到 通用字符,它一般用在测试密码框,账号框等输入框中的字符是否匹配。

3. 语法

正则表达式是由普通字符(例如字符 a 到 z)以及特殊字符(称为"元字符")组成的文字
模式

1.普通字符

普通字符包括大写和小写字母所有数字、所有标点符号以及非打印字符和一些其他符号。

非打印字符

 

2. 特殊字符

特殊字符就是一些有特殊含义的字符,如下

 

3. 限定符

+ 号代表前面的字符必须至少出现一次(1 次或多次)

sjp+,可以匹配 sjp、sjpp、sjppp等,

* 号代表前面的字符可以不出现,也可以出现一次或者多次

sjp*,可以匹配sj、sjp、sjpp 等,(0 次、或 1 次、或多次) 

? 问号代表前面的字符最多只可以出现一次(0 次、或 1 次)  

sjp? 只能 匹配 sj 或者 sjp 

{n}, n 是一个非负整数。匹配确定的 n 次

例如,'o{2}' 不能匹配 "Bob" 中的 'o',但是能匹配 "food" 中的两个 o

{n,},n 是一个非负整数。至少匹配 n 次

 o{2,}' 不能匹配 "Bob" 中的 'o'但能匹配 "foooood" 中的所有 o。'o{1,}' 等价于'o+'。'o{0,}' 则等价于 'o*'。

{n,m},m 和 n 均为非负整数,其中 n <= m。最少匹配 n 次且最多匹配 m 次 

最少匹配 n 次且最多匹配 m 次。例如,"o{1,3}" 将匹配"fooooood" 中的前三个 o

 

4. 定位符

注意:不能将限定符与定位符一起使用。由于在紧靠换行或者单词边界的前面或后面不能有
一个以上位置,因此不允许诸如 ^* 之类的表达式 

5. 运算优先级

正则表达式从左到右进行计算,并遵循优先级顺序,这与算术表达式非常类似。
相同优先级的从左到右进行运算,不同优先级的运算先高后低。下表从最高到最低说明了各
种正则表达式运算符的优先级顺序:

 

3.匹配规则

1. 基本模式匹配

模式,是正则表达式最基本的元素,它们是一组描述字符串特征的字符。模式可以很简单,由普通的字符串组成,也可以非常复杂,往往用特殊的字符表示一个范围内的字符、重复出现,或表示上下文。

  • ^ 符号用来匹配那些以给定模式开头的字符串
^once
/*
这个模式 包含一个特殊的字符^,表示该模式只匹配那些以 once 开头的字符串。
例如 该模式与字符串"once upon a time"匹配,与"There once was a man from NewYork"
不匹配。正如如^符号表示开头一样.
*/
  • $符号用来匹配那些以给定模式结尾的字符串
bucket$
/*
这个模式与"Who kept all of this cash in a bucket"匹配,与"buckets"不匹配。字符 ^ 和 $ 同
时使用时,表示精确匹配(字符串与模式一样)
*/
^bucket$
/*
这个模式只匹配字符串"bucket"
*/

如果一个模式不包括^和$,那么它与任何包含该模式的字符串匹配。
例如:

模式:once

字符串:There once was a man from NewYork,Who kept all of his cash in a bucket.  匹配

2. 字符簇

正则表达式通常用来验证用户的输入。当用户提交一个 表单以后,要判断输入的电话号码、地址、EMAIL 地址、信用卡号码等是否有效,用普通的基于字面的字符是不够的。 所以就需要用字符簇来表示。

要建立一个表示所有元音字符的字符簇,就把所有的元音字符放在一个方括号里

[AaEeIiOoUu]

这个模式与任何元音字符匹配,但只能表示一个字符,用连字号可以表示一个字符的范围:

[a-z] //匹配所有的小写字母
[A-Z] //匹配所有的大写字母
[a-zA-Z] //匹配所有的字母
[0-9] //匹配所有的数字
[0-9\.\-] //匹配所有的数字,句号和减号
[ \f\r\t\n] //匹配所有的白字符

这些也只表示一个字符。如果要匹配一个由一个小写字母和一位数字组成的字符串

比如"z2"、"t6"或"g7",但不是"ab2"、"r2d3" 或"b52"的话,用这个
模式:

^[a-z][0-9]$

尽管[a-z]代表 26 个字母的范围,但在这里它只能与第一个字符是小写字母的字符串匹配。

上面提到^表示字符串的开头,但它还有另外一个含义。当在一组方括号里使用 ^ 时,
它表示"非"或"排除"的意思
,常常用来剔除某个字符 :

还用前面的例子,我们要求第一个字符不能是数字:

^[^0-9][0-9]$

这个模式与"&5"、"g7"及"-2"是匹配的,但与 "12"、"66" 是不匹配的。下面是几个排除特定字
符的例子:

[^a-z] //除了小写字母以外的所有字符

3. 确定重复出现

如果一个单词有若干个字母组成,一组数字有若干个单数组成。跟在字符或字符簇后面的花括号({})用来确定前面的内容的重复出现的次数

如下:

^a{4}$  // aaaa
^a{2,4}$  //aa aaa aaaa
^a{2,}$  // aa ,aaa aaa等多个a
^a{2,}  //aardvark 和 aaab可以, apple不行
a{2,}  //baad aaaa可以,但Nantucket不行 
.{2}   //匹配所有的两个字符
\t{2}  //两个字表符

更多的单词和数字的匹配:

^[a-zA-Z0-9_]{1,}$ // 所有包含一个以上的字母、数字或下划线的字符串
^[1-9][0-9]{0,}$ // 所有的正整数
  • [1-9] 表示 可以从中 1-9选中一个字符
  • [0-9]{0,} 表示可以从0~9中选择任意个字符。
^\-{0,1}[0-9]{1,}$ //所有整数

\-{0,1}:表示可以匹配0个或者1个 " -" 符号

[0-9]{1,}:表示可以匹配1个以上的 0-9数字

^\-?[0-9]{1,}\.?[0-9]{1,}$ //所有的浮点数

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

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

相关文章

MAYA挖掘机绑定

打组 少选一个 放中心点 把它放组里 放中心点 创建骨骼 放骨骼 旋转不会带动上面骨骼 中心点的位置 骨骼和组做约束 活塞运行 放中心点 相互目标 管子短&#xff0c;需要加长 又短了 设置中心点 创建IK 制作控制器 让控制器带动模型动 手柄 IK 少一个控制器 删除 不用的…

途乐证券杠杆开户-A股首份半年报出炉 康缘药业净利同比增30.6%

中药职业迎成绩兑现期&#xff0c;多家公司上半年盈利估计倍增 7月12日晚&#xff0c;沪深两市首份半年报出炉。康缘药业半年报显示&#xff0c;公司上半年完成营收25.53亿元&#xff0c;同比添加21.74%&#xff1b;完成归母净利润2.76亿元&#xff0c;同比添加30.6%。 康缘药…

Endnote更新所有信息不全的参考文献(中英文文献信息不全)

方法一&#xff1a;手动 找到reference一个一个输入&#xff08;这里针对某些没有doi的文献&#xff0c;有doi的也可以&#xff0c;只要你愿意&#xff09; 方法二&#xff1a;自动 中文文献------选择txt格式导入endnote&#xff0c;在endnote里选择endnote import&#xf…

得物自建 DTS 平台的技术演进 | 精选

0 前言 DTS是数据传输平台(Data Transfer Platform的缩写) 随着得物App的用户流量增长&#xff0c;业务选择的数据库越来越多样化&#xff0c;异构数据源之间的数据同步需求也逐渐增多。为了控制成本并更好地支持业务发展&#xff0c;我们决定自建DTS平台。本文主要从技术选型、…

Qt6之通用文件格式.dat

dat文件&#xff0c;在Windows中大量存在&#xff0c;到处都有。如下图edge浏览器安装目录下就有一个dat文件&#xff0c;如果你强行打开&#xff0c;发现它是乱码的。 一、什么是dat文件 DAT 文件格式只是一种通用格式&#xff0c;它在文件中包含任何类型的数据&#xff0c;它…

使用 TensorRT、卡尔曼滤波器和 SORT 算法进行实时对象检测和跟踪:第 1 部分训练模型

实时物体检测和跟踪在监控、自动驾驶和机器人等各种应用中至关重要。这些任务需要能够实时处理高分辨率视频流的高效算法。近年来,基于深度学习的目标检测算法(例如YOLO、SSD和Faster R-CNN)在图像和视频中的目标检测和定位方面显示出了令人印象深刻的结果。然而,这些算法的…

JVM面试题详解

JVM介绍 JVM是什么&#xff1f; JVM由哪些部分组成&#xff1f;运行流程是什么&#xff1f; JVM组成 什么是程序计数器 你能给我详细的介绍Java堆吗&#xff1f; 什么是虚拟机栈&#xff1f; 堆栈的区别是什么&#xff1f; 能不能解释一下方法区 你听过直接内存吗 类加载器 …

tx视频 wx小程序 视频缓存方案

本文所有教程及源码、软件仅为技术研究。不涉及计算机信息系统功能的删除、修改、增加、干扰,更不会影响计算机信息系统的正常运行。不得将代码用于非法用途,如侵立删!tx视频 wx小程序 视频缓存方案 环境 win10CharlesInternet Download Manager抓包分析 搜索关键词可以很容…

《生活教育》期刊简介及投稿邮箱

《生活教育》期刊简介及投稿邮箱 《生活教育》杂志创办于1934&#xff0c;是中华人民共和国教育部主管的国家重点学术期刊&#xff0c;国家级期刊&#xff0c;中国知网全文收录G4期刊&#xff0c;它的理论是陶行知教育思想的主线和重要基石&#xff0c;陶行知的教育理论&#…

【力扣算法06】之 _2544_ 交替数字和- python

文章目录 问题描述示例1示例 2示例 3提示 思路分析代码分析完整代码运行示例效果截图 完结 问题描述 给你一个正整数 n 。n 中的每一位数字都会按下述规则分配一个符号&#xff1a; 最高有效位 上的数字分配到 正 号。 剩余每位上数字的符号都与其相邻数字相反。 返回所有数字及…

这5款多 GPU 渲染器提升渲染能力,赶紧用起来

多 GPU 渲染的强大功能可以使您的渲染能力增加一倍、三倍或更多。使用合适的多GPU渲染引擎可以帮助您在短时间内以更快的速度获得高质量的产品。什么是真正的多 GPU 渲染&#xff1f;最好的多 GPU 渲染引擎是什么&#xff1f; 什么是多 GPU 渲染和多 GPU 渲染引擎&#xff1f;…

编译mysql8.0.33遇见错误libstdc++.so.6: version CXXABI_1.3.9 not found

1 现象 在执行make编译mysql8.0.33时&#xff0c;遇见报错信息&#xff1a; /lib64/libstdc.so.6: version CXXABI_1.3.9 not found&#xff0c; 查看版本发现只是1.3.7。 2 解决方案 2.1 解决方案1 安装glibc-2.18。 2.1 解决方案2 执行如下指令&#xff0c;将新文件替…

[微信小程序] movable-view 可移动视图容器 - 范围问题

movable-view 可移动视图容器 可移动视图容器&#xff0c;在页面中可以拖拽滑动。movable-view必须在 movable-area 组件中&#xff0c;并且必须是直接子节点 <view><movable-area style"width: 750rpx;height: 200rpx;background-color: gainsboro;">&l…

【力扣算法10】之 7. 整数反转 python

文章目录 问题描述示例1示例2示例3示例4提示 思路分析代码分析完整代码详细分析运行效果截图调用示例运行结果 完结 问题描述 给你一个 32 位的有符号整数 x &#xff0c;返回将 x 中的数字部分反转后的结果。 如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] &…

(Onenet)STM32L+BC20+MQTT协议传输温湿度,ADC,电压,GPS数据到Onenet物联网平台

1、材料准备 准备以下材料 2、设备连接 2.1 插入物联网卡 首先把BC20核心板从开发板上拆下来 然后将物联卡放置在BC20核心板内 物联卡放置完成将BC20核心板重新插入到开发板内&#xff08;注意不要弄错方向&#xff09; 同时接入天线 2.2 连接ST-Link仿真器 用3条杜邦线接…

python接口自动化(三十四)-封装与调用--函数和参数化(详解)

简介 前面虽然实现了参数的关联&#xff0c;但是那种只是记流水账的完成功能&#xff0c;不便于维护&#xff0c;也没什么可读性&#xff0c;随着水平和技能的提升&#xff0c;再返回头去看前边写的代码&#xff0c;简直是惨不忍睹那样的代码是初级入门的代码水平都达不到。接下…

股票开户手续费最低的券商有哪些?揭秘券商成本佣金,交易费率原来可以这么低!

哪个券商手续费最低实际上是没有这种说法的&#xff0c;想要低手续费一定要联系线上客户经理办理开户&#xff0c;是可以和线上客户经理协商降低手续费的&#xff0c;一定要通过线上客户经理特殊渠道开户&#xff0c;才能享受低手续费账户&#xff0c;还可以办理到vip账户&…

Python中可以用三种方法判断文件是否存在

目录 前言1.使用os模块2.使用Try语句3. 使用pathlib模块尾语 &#x1f49d; 前言 大家早好、午好、晚好吖 ❤ ~欢迎光临本文章 通常在读写文件之前&#xff0c;需要判断文件或目录是否存在&#xff0c;不然某些处理方法可能会使程序出错。 所以最好在做任何操作之前&#xff…

spring复习:(22)实现了BeanNameAware等Aware接口的bean,相应的回调方法是在哪里被调用的?

AbstractAutowireCapableBeanFactory的doCreateBean用来创建bean, 其中调用了initializeBean方法对bean进行初始化 initializeBean包含如下代码&#xff1a; 而invokeAwareMethods代码如下&#xff1a; 可见其分别判断是否实现了BeanNameAware接口、BeanClassLoaderAware接口…

【Linux指令sudo与Linux编译器-gcc/g++】

目录 一、sudo1.1为什么我用不了sudo命令1.2如何将普通用户添加到信任列表里面 二、Linux编译器-gcc/g使用2.1背景知识2.2gcc如何完成上面的4个功能&#xff1f;2.3函数库 一、sudo sudo是linux系统管理指令&#xff0c;是允许系统管理员让普通用户执行一些或者全部的root命令…