概述正则表达式是很多运维薄弱的技能,很多时候,大家发现正则表达式难记、难学、难用,但不可否认的是,正则表达式是一项非常重要的技能。今天将学习和使用正则表达式的要点整理如下,仅供参考。什么是正则表达式?正则表达式(RegularExpression或Regex)是用于定义特定搜索模式的字符组合。正则表达式可用于匹配、查找和替换文本中的字符,验证输入数据,查找英文单词的拼写错误等等。调试工具下面列出了几个优秀的在线调试工具,如果您要创建或调试正则表达式,您可能需要这些工具。就个人而言,我更喜欢Regex101。Regex101支持在不同风格的正则表达式之间切换,解释你的正则表达式,显示匹配信息,并提供常用语法参考。它非常强大。1.Regex1012、Regexr3、Regexpal以Javascript开头,正则表达式以/开头和结尾,所以像/helloregexp/这样简单的东西就是正则表达式。Flags(identifierormodifier)写在/之后的标志,可以影响整个正则表达式的匹配行为。常用标志有:g:全局匹配(global);正则表达式默认只会返回第一个匹配的结果,所有的匹配都可以使用标识符gi:ignorecase(不区分大小写)返回;匹配时忽略英文字母m的大小写:多行匹配(multiline);开始和结束字符(^和$)在多行上工作,即匹配每行的开始和结束(由\n或\r分隔),而不是仅匹配整个输入字符串的开始和结束。Flags可以组合使用,例如:CharacterSets(字符集)是用来匹配字符集中的任意字符。常用字符集有:[xyz]:匹配"x"or"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次。在这种情况下,可以使用量词来实现重复匹配。{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/匹配“atnoon”中的“no”,/ly\b/匹配“possiblyyesterday”中的“ly”。\B:匹配一个零宽度的非单词边界,比如两个字母之间或者两个空格之间;例如/\Bon/匹配“中午”中的“on”,/ye\B/匹配“可能是昨天”中的“ye”。\t:匹配一个水平制表符(tab)\n:匹配一个换行符(newline)\r:Matchacarriagereturncharacter(carriagereturn)例子上面列举了这么多正则表达式的语法和规则,可以在一定程度上帮助我们分析和理解一个正则表达式但是,如何组合这些规则而创造具有特定功能的表情则需要自己多加练习。这里有几个例子来说明这些规则的使用。1.匹配手机号下面先从比较简单的手机号匹配说起。目前国内手机号码都是11位数字(3/4/5/7/8),所以手机号码的正则化可以分解为以下几部分:1开头:/^1/第二个数字为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、符合email标准的邮件组成为@.,各部分的格式标准为(相应简化,主要展示正则的写法):yourname:任意英文字母(a-z/A-Z),数字(0-9)、下划线(_)、英文句点(.)、连字符(-),长度大于0的域:任意英文字母(a-z/A-Z)、数字(0-9)、连字符(-)、长度大于0extension:任意英文字母(a-z/A-Z),长度2-8optional-extension:以“.”开头,后接任意英文字母(a-z/A-Z),长度2-8,可选正则表达式每个部分的是:你的名字:/[a-z\d._-]+/domain:/[a-z\d-]+/extension:/[a-z]{2,8}/optional-extension:/(\.[a-z]{2,8})?/组合形成最终的正则表达式:/^([a-z\d._-]+)@([a-z\d-]+)\.([a-z]{2,8})(\.[a-z]{2,8})?$/;为了增加可读性,可以把每一部分用“()”包裹起来,不要忘记开始和结束字符^$。摘要的篇幅有限。今天关于正则表达式的内容就先介绍到这里,后面会分享更多devops和DBA的内容。感兴趣的朋友可以关注一下~
