正则表达式 任意数字_作为运维还不会正则表达式?赶快看这篇学习一下

概述

正则表达式是很多运维薄弱的一项技能。大家很多时候都会觉得正则表达式难记、难学、难用,但不可否认的是正则表达式是一项很重要的技能,所有今天将学习和使用正则表达式时的关键点整理如下,仅供参考。


什么是正则表达式?

正则表达式(Regular Expression 或 Regex),是用于定义某种特定搜索模式的字符组合。正则表达式可用于匹配、查找和替换文本中的字符,进行输入数据的验证,查找英文单词的拼写错误等。

5d3d80dd371628688fa6d7d249dc05e3.png

调试工具

下面列出了几款优秀的在线调试工具,如果你想创建或者调试正则表达式可能会需要。个人比较偏好Regex101,regex101 支持在正则表达式的不同 flavor 之间切换、解释你的正则表达式、显示匹配信息、提供常用语法参考等功能,非常强大。

1、Regex101

acb26cbf1c2493ad1ac2090ab4d23e0a.png

2、Regexr

359f2c1eca7918d4e80f4749f08bd89a.png

3、Regexpal

f8563212a5f68c6c92c27f059f6bdf37.png

开始

在 Javascript 中,一个正则表达式以 / 开头和结尾,所以简单至 /hello regexp/ 就是一个正则表达式。


Flags(标志符或修饰符)

Flags 写在结束的/之后,可以影响整个正则表达式的匹配行为。常见的 flags 有:

g:全局匹配(global);正则表达式默认只会返回第一个匹配结果,使用标志符g则可以返回所有匹配

i:忽略大小写(case-insensitive);在匹配时忽略英文字母的大小写

m:多行匹配(multiline);将开始和结束字符(^和$)视为在多行上工作,即分别匹配每一行(由 或 分割)的开始和结束,而不只是只匹配整个输入字符串的最开始和最末尾处

Flags 可以组合使用,如:

ffe9d7602607d0154a25f5caef25a691.png

Character Sets(字符集合)

用于匹配字符集合中的任意一个字符,常见的字符集有:

[xyz]:匹配 "x"或"y"``"z"

[^xyz]:补集,匹配除 "x" "y" "z"的其他字符

[a-z]:匹配从 "a" 到 "z" 的任意字符

[^a-n]:补集,匹配除 "a" 到 "n" 的其他字符

[A-Z]:匹配从 "A" 到 "Z" 的任意字符

[0-9]:匹配从 "0" 到 "9" 的任意数字

比如匹配所有的字母和数字可以写成:/[a-zA-Z0-9]/ 或者 /[a-z0-9]/i。


Quantifiers (量词)

在实际使用中常需要匹配同一类型的字符多次,比如匹配 11 位的手机号,我们不可能将 [0-9] 写 11 遍,此时可以使用 Quantifiers 来实现重复匹配。

{n}:匹配 n 次

{n,m}:匹配 n-m 次

{n,}:匹配 >=n 次

?:匹配 0 || 1 次

*:匹配 >=0 次,等价于 {0,}

+:匹配 >=1 次,等价于 {1,}


Metacharacters(元字符)

在正则表达式中有一些具有特殊含义的字母,被称为元字符,简言之,元字符就是描述字符的字符,它用于对字符表达式的内容、转换及各种操作信息进行描述。

常见的元字符有:

d:匹配任意数字,等价于 [0-9]

D:匹配任意非数字字符;d 的补集

w:匹配任意基本拉丁字母表中的字母和数字,以及下划线;等价于 [A-Za-z0-9_]

W:匹配任意非基本拉丁字母表中的字母和数字,以及下划线;w 的补集

s:匹配一个空白符,包括空格、制表符、换页符、换行符和其他 Unicode 空格

S:匹配一个非空白符;s的补集

b:匹配一个零宽单词边界,如一个字母与一个空格之间;例如,/bno/ 匹配 "at noon" 中的 "no",/lyb/ 匹配 "possibly yesterday." 中的 "ly"

B:匹配一个零宽非单词边界,如两个字母之间或两个空格之间;例如,/Bon/ 匹配 "at noon" 中的 "on",/yeB/ 匹配 "possibly yesterday."中的 "ye"

:匹配一个水平制表符(tab)

:匹配一个换行符(newline)

:匹配一个回车符(carriage return)


实例

上面罗列出了这么多正则表达式的语法和规则,可以在一定程度上帮助我们分析和理解一段正则表达式的作用,但是如何将这些规则组合并创造出有特定作用的表达式还需要我们自己多加练习,下面举几个例子来说明运用这些规则。

1. 匹配手机号码

我们先从比较简单的匹配手机号码开始。目前国内的手机号码是1(3/4/5/7/8)开头的 11 位数字,因此手机号码的正则可以分解为以下几部分:

以 1 开头:/^1/第 2 位为3、4、5、7、8中的一个:/[34578]/ 或 /(3|4|5|7|8)/剩余 3-11 位均为数字,并以数字结尾:/d{9}$/

组合起来即为 /^1[34578]d{9}$/ 或 /^1(3|4|5|7|8)d{9}$/,因为使用捕获括号存在性能损失,所以推荐使用第一种写法。

2. 匹配电子邮件

标准的电子邮件组成为 @.,

每部分的格式标准为(进行了相应的简化,主要为展示如何书写正则):

yourname:任意英文字母(a-z/A-Z)、数字(0-9)、下划线(_)、英文句点(.)、连字符(-),长度大于 0domain:任意英文字母(a-z/A-Z)、数字(0-9)、连字符(-),长度大于 0extension:任意英文字母(a-z/A-Z),长度 2-8optional-extension:"."开头,后面跟任意英文字母(a-z/A-Z),长度 2-8,可选

每部分的正则表达式为:

yourname:/[a-zd._-]+/domain:/[a-zd-]+/extension: /[a-z]{2,8}/optional-extension:/(.[a-z]{2,8})?/

组合起来形成最后的正则表达式:

/^([a-zd._-]+)@([a-zd-]+).([a-z]{2,8})(.[a-z]{2,8})?$/;

为了增加可读性可以将每部分用"()"包起来,并不要忘记起始和结束符 ^$。


总结

篇幅有限,今天关于正则表达式的内容就介绍到这里,后面会分享更多devops和DBA方面的内容,感兴趣的朋友可以关注下~

d340c7ff50df5581e48e65b16c39d5b6.gif

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

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

相关文章

vs xaml 语句完成 自动列出成员_数据传输 | mysqldiff/mysqldbcompare 实现 DTLE 自动化测试...

作者:张静文爱可生上海研发中心成员,测试工程师,负责 DMP 以及 DTLE 自动化测试。本文来源:原创投稿 *爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。任务:测试开…

js去el的map_JS中也可以使用JSTL和EL标签

//往上滑是调用分页function Ajax(currPage, pageSize) { // ajax后台交互String currPage,String pageSizevar el, Plist, i;el document.getElementById(thelist);var cancle function(options) {var pattern ${pageContext.request.contextPath}/integralParadise/userIn…

python 局域网主机扫描_python扫描局域网主机名

{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":4,"count":4}]},"card":[{"des":"阿里技术人对外发布原创技术内容的最大平台&…

python 并发执行命令_python: 多线程实现的两种方式及让多条命令并发执行

一 概念介绍Thread 是threading模块中最重要的类之一,可以使用它来创建线程。有两种方式来创建线程:一种是通过继承Thread类,重写它的run方法;另一种是创建一个threading.Thread对象,在它的初始化函数(__init__)中将可…

python全系列之爬虫scrapy_python爬虫scrapy之登录知乎

下面我们看看用scrapy模拟登录的基本写法:注意:我们经常调试代码的时候基本都用chrome浏览器,但是我就因为用了谷歌浏览器(它总是登录的时候不提示我用验证码,误导我以为登录时不需要验证码,其实登录时候必须要验证码的…

python 类方法 函数_Python OOP类中的几种函数或方法总结

概述实例方法使用实例调用时,默认传递实例本身到实例方法的第一个参数self使用类调用时,必须传递一个实例对象到实例方法的第一个参数静态方法使用实例调用和类调用效果相同;类方法装饰器版:使用实例调用和类调用效果相同;classmethod(function)版:在类中,尽量不要使用classmet…

raft算法_Raft算法与实现

强一致性、高可用的存储组件是构建现代分布式系统的必要条件,广泛应用于注册中心、配置中心等平台设施中,分布式锁、协调器等等各类场景需求也有相关需求,在该领域有众多知名的开源组件,如etcd、zookeeper、Tikv等等。共识算法是实…

python桌面翻译_Python实现桌面翻译工具【新手必学】

Python 用了好长一段时间了,起初是基于对爬虫的兴趣而接触到的。随着不断的深入,慢慢的转了其它语言,毕竟工作机会真的太少了。很多技能长时间不去用,就会出现遗忘,也就有了整理一下,供初学者学习和讨论。相…

python 环境管理工具_再见 virtualenv!K神教你轻松管理多个Python环境

原标题:再见 virtualenv!K神教你轻松管理多个Python环境超级无敌干货第一时间推给你!!!小编电脑上有多个 Python 开发环境,每次都是用 virtualenv 创建一个 Python 虚拟环境,pip 安装第三方库&a…

mysql选取最小值_MySQL:选择x最小值

是否希望此工作(未测试):SELECT moname, MIN(updatetime) FROM amoreAgentTST01GROUP BY moname HAVING COUNT(moname)>1编辑-上面的意思只是作为现有代码的替换,所以它不会直接回答您的问题。我认为这样的事情应该适用于你的主要问题:SELECT moname, updatetime FROM amore…

python22起作业答案_python第22天作业

今日作业:1、检索文件夹大小的程序要求执行方式如下python3.8 run.py 文件夹import osimport sysfile_list os.listdir(sys.argv[1])def file_size(file_list,size 0):for file in file_list:if not os.path.isfile(file):file_list os.listdir(file)if not file…

python字典导入mongodb_Python语言生成内嵌式字典(dict)-案例从python提取内嵌json写入mongodb...

本文主要向大家介绍了Python语言生成内嵌式字典(dict)-案例从python提取内嵌json写入mongodb,通过具体的内容向大家展示,希望对大家学习Python语言有所帮助。从mongo查询利用python 读写如新的集合import traceback,from gaode_hotel.conn_mongodb impor…

python把浮点数转换成16进制_Python将colorsys RGB坐标转换为十六进制

从this answer开始,我在Python中生成一些均匀间隔的颜色,如下所示:>>> import colorsys>>> num_colors 22>>> hsv_tuples [(x*1.0/num_colors, 0.5, 0.5) for x in range(num_colors)]>>> rgb_tuples map(lambda x: colorsy…

静态ip ssh无法登录_识别动静态IP的技巧

动态IP,又称DHCP上网,即自动获取IP上网。动态IP这种上网方式,连接网络时即可自动获取IP地址来正常上网。在未使用路由器的情况下,只需要把宽带网线连接到电脑上,电脑上的IP地址设置为自动获得,电脑就可以实…

python集合数据结构_Python数据结构-集合

1.集合"""集合(set):没有重复元素且没有顺序的数据结构定义语法:s set({}) #空集合s set({1, 2, 3, 4, 5})增加:add() 往集合添加一条数据update() 合并,支持传入列表、字典、元组、集合,不支持传入单…

18awg线材最大电流_小米生态链拉车线:2.4A大电流,苹果MFi认证,高速充电不断裂...

对于经常使用苹果手机的用户来说,不随时准备几根充电线好像总感觉差点什么,苹果官方的电源线不耐用早已是公认的事实,其实最主要的还是因为苹果手机电池容量低,相对来说充电次数要比安卓手机多一些,电源线使用频率也就…

method java_解析Java中的Field类和Method类

Field类Field类中定义了一些方法,可以用来查询字段的类型以及设置或读取字段的值。将这些方法与继承而来的member方法结合在一起.就可以使我们能够找出有关字段声明的全部信息,并且能够操纵某个特定对象或类的字段。getGenericType方法返回表示字段的声明…

a股历史30年的大盘价_2020年7月30日大盘走势分析

2020年7月30日大盘走势分析严正声明:分析下面小程序炒股广告与本公众号zyh218642无关,纯属第三方平台自然生成,不要点开,谨防上当受骗。7月份大盘走势分析7月份大盘的多空压力与支撑位置:…第二压力:3139.0…

java 做ui_【原创】JavaApplication的UI也可以做的很美

最近在做Java Application的项目,对于ui的美观,做了一些尝试。有幸看到了JGoodIdes的LookAndFeel包。效果大家可以看看如下连接http://www.jgoodies.com经过试验,解决了中文乱码问题,下面将经验和大家共分享。LookAndFeel如同css一…

python低代码_几行代码搞定ML模型,低代码机器学习Python库正式开源

PyCaret 库支持在「低代码」环境中训练和部署有监督以及无监督的机器学习模型,提升机器学习实验的效率。想提高机器学习实验的效率,把更多精力放在解决业务问题而不是写代码上?低代码平台或许是个不错的选择。最近,机器之心发现了…