正则表达式入门与进阶
文章目录
- 正则表达式入门部分
- 一、字符组
- 二、区间
- 三、特殊字符转义符
- 四、字符组取反
- 五、快捷方式
- 5.1 匹配单词字符、数字
- 5.2 匹配空白
- 5.3 匹配单词边界
- 5.4、快捷方式取反
- 5.5、开始和结束
- 5.6、任意字符
- 5.7、可选字符
- 六、匹配多个字符
- 6.1、重复
- 6.2、重复区间
- 6.3、开闭区间
- 七、入门总结
- 7.1、多种匹配模式
- 7.2、快捷方式
- 正则表达式进阶部分
- 一、分组
- 1.1 或者条件`|`
- 1.2 非捕获分组`(?:表达式)`
- 1.3 分组的回溯引用
- 二、先行断言
- 2.1 正向先行断言
- 2.2 反向先行断言
- 三、后行断言
- 3.1 正向后行断言
- 3.2 反向后行断言
正则表达式入门部分
一、字符组
定义:字符组
[]
允许匹配一组可能出现的字符。案例:
答案:
[Jj]ava8.0
注:[]默认只会匹配字符组中的一个字符。
二、区间
- 定义:正则表达式引擎在字符组中使用连字符(
-
)代表区间。 - 案例:
- 答案:
[a-z0-9A-Z]+
- 注:a-z代表的是abcdef…z,0-9代表的是0123456789等,但是
[]
只会代表一个,所以后面的+
代表的是重复出现的次数为:1-多次
三、特殊字符转义符
- 定义:对于一些含有特殊意义的字符,如
-
,有时候需要匹配的符号就是-
号,该怎么办呢? - 案例:
- 答案:
[\[\-\(][\-\]\)]+
- 注:对于这些特殊字符,需要
\
进行转义。
四、字符组取反
- 定义:我们定义的字符组都是由可能出现的字符定义,不过有时候我们可能希望根据不会出现的字符定义字符组。
- 案例:匹配不包含数字的字符组
- 答案:
[^0-9]
- 注:
^
表示匹配的一个字符是不包含数字的,可能是一个小写字母,也可能是一个大写字母。
五、快捷方式
5.1 匹配单词字符、数字
定义:
案例:
答案:
\w+
5.2 匹配空白
定义:
\s
快捷方式可以匹配空白字符,比如空格,tab、换行等。案例:
答案:
code\s.*
5.3 匹配单词边界
定义:
\b
匹配的是单词的边界案例:
答案:
\bcode\b
注:匹配的单词的边界,像上面的codeasd就不会被匹配到。
5.4、快捷方式取反
定义:快捷方式也可以取反,例如对于
\w
的取反为\W
,将小写改写成大写即可,其他快捷方式也遵循这个规则.案例:请使用正则表达式匹配下列开头不以字母开头的单词。
答案:
\W\w+
5.5、开始和结束
定义:正则表达式中
^
指定的是一个字符串的开始,$
指定的是一个字符串的结束。案例:请编写正则表达式匹配以
OS
结尾的字符串。
答案:
\w+\s?OS$
5.6、任意字符
定义:
.
字符代表匹配任何单个字符,它只能出现在方括号以外
。案例:匹配任意字母之后是ar的字符串
答案:
.+ar
5.7、可选字符
定义:有时,我们可能想要匹配一个单词的不同写法,比如
color和colour,或者honor与honour
。这个时候我们可以使用? 符号
指定一个字符、字符组或其他基本单元可选,这意味着正则表达式引擎将会期望该字符出现零次或一次。案例:请你使用正则来匹配
favorite
和favourite
这两种写法。
答案:
favou?rite
六、匹配多个字符
6.1、重复
定义:我们只是学习了关于仅出现
一次的字符串匹配
,在实际开发中,肯定不能满足需求,比如要匹配电话号码、身份证的时候就无法满足需求了。在一个字符组后加上{N}
就可以表示在它之前的字符组出现N
次.案例:
答案:
\d{3}-\d{5}
6.2、重复区间
定义:有时候,我们不知道具体要匹配字符组要重复的次数,比如身份证有15位也有18位的。这里重复区间就可以出场了,语法:
{M,N}
,M是下界而N是上界
。案例:
答案:
\d{3,4}-\d{7}
注:
\d{3,4}
既可以匹配3个数字也可以匹配4个数字,不过当有4个数字的时候,优先匹配的是4个数字,这是因为正则表达式默认是贪婪模式
,即尽可能的匹配更多字符,而要使用非贪婪模式
,我们要在表达式后面加上 ?号
。
6.3、开闭区间
定义:我们可能遇到字符组的重复次数没有边界,闭区间不写即可表示匹配一个或无数个,格式为
{1,}
.案例:请使用正则表达式匹配以
f
开头的数据。
答案:
f.+
注:
+
等价于{1,}
,*
等价于{0,}
七、入门总结
7.1、多种匹配模式
7.2、快捷方式
正则表达式进阶部分
一、分组
定义:在正则表达式中还提供了一种将表达式
分组
的机制,当使用分组时,除了获得整个匹配。还能够在匹配中选择每一个分组。
要实现分组很简单,使用()
即可。
分组有一个非常重要的功能——捕获数据。所以()被称为捕获分组
,用来捕获数据,当我们想要从匹配好的数据中提取关键数据的时候可以使用分组
。案例:
答案:
<div>(.*?)</div>
注:
.*?
的意思是任意字符,并且可有可无。
1.1 或者条件|
定义:使用分组的同时还可以使用
或者(or)
条件。案例:视频文件的后缀名有
.mp4、.avi、.wmv、.rmvb
请编写正则表达式提取所有的视频文件的后缀
答案:
.*(\.mp4|\.avi|\.wmv|\.rmvb)
1.2 非捕获分组(?:表达式)
定义:有时候,我们并不需要捕获某个分组的内容,但是又想使用分组的特性。这个时候就可以使用非捕获组
(?:表达式)
,从而不捕获数据,还能使用分组的功能。案例:提取目标数据中的电话号码
答案:
(?:.+)[\-\:](\d+)
1.3 分组的回溯引用
定义:正则表达式还提供了一种引用之前匹配分组的机制,有些时候,我们或许会寻找到一个子匹配,该匹配接下来会再次出现。如果想让后面分组的正则和第一个分组的正则匹配同样的数据该如何做呢?可以使用
分组的回溯引用
,使用\N
可以引用编号为N的分组
.案例:
答案:
(\w{2,})\1
二、先行断言
2.1 正向先行断言
- 定义:
(?=表达式)
,指在某个位置向右看
,表示所在位置右侧必须能匹配表达式. - 案例:
我喜欢你
我喜欢
我喜欢我
喜欢
喜欢你
如果要取出喜欢
两个字,要求这个喜欢
后面有你
,这个时候就要这么写:喜欢(?=你)
,这就是正向先行断言。
2.2 反向先行断言
定义:反向先行断言
(?!表达式)
的作用是保证右边不能出现
某字符。案例:编写正则表达式匹配不是qq邮箱的数据。
答案:
.*@(?!qq).*
三、后行断言
- 先行断言和后行断言只有一个区别,即先行断言从左往右看,后行断言从右往左看。
3.1 正向后行断言
定义:
正向后行断言:(?<=表达式)
,指在某个位置向左看,表示所在位置左侧必须能匹配表达式.案例:使用正则表达式匹配匹配王姓同学的名字。
答案:
.*?(?<=王).+
3.2 反向后行断言
定义:
(?<!表达式)
,指在某个位置向左看,表示所在位置左侧不能匹配表达式.案例:请使用正则表达式匹配一个
$
符号中的数据。
答案:
\$.*(?<!\$)\$$
学习视频:https://www.bilibili.com/video/BV19t4y1y7qP?p=1
正则练习网址: https://www.codejiaonang.com/
正则在线测试网站: https://regexr-cn.com/
正则表达式入门与进阶相关推荐
- java入门学习_Java入门学习进阶知识点
Java入门学习进阶知识点 入门阶段,主要是培养Java语言的编程思想.了解Java语言的语法,书写规范等,掌握Eclipse.MyEclipse等开发工具,编写Java代码的能力.学完这个阶段你应该 ...
- [资源]推荐一些Python书籍和教程,入门和进阶的都有!
前几天后台有读者留言说希望推荐一些入门的书籍,所以这几天都在整理一些我入门时候学习过的书籍教程,或者是口碑还不错的书籍! 入门和进阶书籍教程 入门和进阶方面的书籍教程,这里推荐两本书和一个教程. 1. ...
- 自学python买什么教材-从入门到进阶必看,51本Python精品书籍免费送!
原标题:从入门到进阶必看,51本Python精品书籍免费送! 源 /网络 Python是一种多功能语言.它经常用作Web应用程序的脚本语言,嵌入到软件产品中,以及人工智能和系统任务管理.它既简单又强大 ...
- Linux运维入门及进阶全新经典视频-老男孩Linux第三部-老男孩-专题视频课程
Linux运维入门及进阶全新经典视频-老男孩Linux第三部-20502人已学习 课程介绍 本Linux高薪运维入门及进阶,为入门教学中的基础部分,以简单.易用.高效的方式为初学者讲解 ...
- python入门与进阶
title: python入门与进阶 categories: python tags: [python] python入门导学 python的特点 是面向对象的编程语言 简介,灵活,优雅,哲学 易于上 ...
- 【python学习】正则表达式入门
python正则表达式入门学习 前言 今天进入python正则表达式的入门学习 学习正则表达式的初衷还是为了awd比赛做准备 (好吧,其实学习python都是为了ctf啊) 学习的目的就是为了可以提取 ...
- HBase入门至进阶以及开发等知识梳理
HBase入门至进阶以及开发等知识梳理 HBase简介 hadoop简介 Hadoop是一个由Apache基金会所开发的分布式系统基础架构.用户可以在不了解分布式底层细节的情况下,开发分布式程序.充分 ...
- ab753变频器参数怎么拷贝到面板_【干货】一文让你从入门小白进阶为变频器高手...
点击蓝字 关注我们 为确保 SINAMICS G120 的操作及监控便捷高效,提供了三种不同的操作面板: 1.基本操作面板(BOP-2). 2.智能操作面板(IOP-2) 3.智能连接模块(G120 ...
- 程序员编程如何入门、进阶?
作者 | 码农唐磊 来源 | 程序猿石头(ID:tangleithu) 背景 在之前的这篇文章中,我谈了谈读本科的时候都学了哪些计算机专业课和推荐了一些经典的技术书籍,然后推文封面中的这张图引起了不少 ...
最新文章
- OS X 下在代码中枚举所有进程的方法
- MyBatis 之 动态SQL
- ML之nyoka:基于nyoka库利用LGBMClassifier模型实现对iris数据集训练、保存为pmml模型并重新载入pmml模型进而实现推理
- 澳大利亚 计算机 博士,澳大利亚迪肯大学招收计算机博士
- OC之非ARC环境下循环retain问题
- 图像处理技术(三)白平衡
- Linux启动提示Kernel panic - not syncing: Attempted to kill init解决办法
- 我的Mac os x中的nginx配置文件nginx.conf
- Oracle 10g Audit(审计) --- 记录登录用户在Oracle中的所有操作(转)
- EleutherAI:当OpenAI不够开放时,我们该如何选择?
- c语言编写电子秒表程序,电子秒表C程序.doc
- 如何修改操作系统运行服务器,如何设置Bios 最常见bios设置与修改详细图解教程...
- 通过yum安装redis
- Java实现俄罗斯方块小游戏。(附完整源代码)
- 《Nature-Inspired Metaheuristic Algorithms》——蝙蝠算法 Bat Algorithm
- 像素测量工具_PicPick v5.0.6 屏幕截图工具
- 超宽屏幕比例_Hello!宽时代 21:9超宽屏显示器选购
- markdown颜色索引及表格背景颜色填充
- 【2020.10.29 洛谷团队赛 普及组】T6 U138025 小武的方程
- 中国半导体工业测试设备市场深度研究分析报告
热门文章
- 我香港账户的钱怎么几天了还没到账?
- Centos学习笔记
- API Guide---Hardware Acceleration硬件加速
- ccf寻宝!大冒险!python满分(敲开心~)
- Mac下的切图神器——Slicy使用说明
- java map类说_在Java中,关于HashMap类的描述,以下说法错误的是( )。
- 国内最强的电子计算机专科学校,2021中国电子与计算机工程学专业大学排名 最好的高校排行榜...
- 修改mysql注册表在_mysql服务如何修改注册表
- Radiology第11期:心脏MRI预测扩张型心肌病的心源性猝死风险
- 关于 谷歌浏览器主页被劫持的 解决方法