正则表达式Regex小试

        文章开始前推荐一下正则表达式在线编辑器:RegExr: Learn, Build, & Test RegEx

一、修饰符

        正则表达式的具体表达一般位于两个“/”之间,如"/[A-Z]/g",其中“[A-Z]”便是主要内容,而最后一个“/”后的“g”字符则是修饰符的一种,用于辅助表示正则表达式的作用域或者作用方式。类似的常用修饰符如下所示:

g --> global,表示作用于全域
i --> case insensitive / ignore,表示不区分大小写
m --> multi-lines,表示多行匹配(许多正则编辑器默认多行)
s --> 允许特殊字符.匹配到换行符

        第一章节后的输入示例均省略'/'与修饰符。

二、单点匹配

        1.精准匹配

        在正则表达式编辑器中输入“a”,便可以精准匹配到文本中全部的字符‘a’所在处,若输入“ab”则会匹配到文本中全部的子串“ab”所在处。

        2.范围匹配

        在正则表达式编辑器中还可以通过中括号“[ ]”来实现范围性的匹配。若输入“[ab]”,意为“匹配字符‘a’或字符‘b’ ”,可以匹配到文本中字符‘a’或者‘b’的全部所在处。还可以输入“[a-z]”用以匹配任意的小写字母,输入“[A-Z]”匹配任意的大写字母。

        此外,如同逻辑表达式中的“非”一样,正则表达式1也提供多种多样的“非”的表达形式,在中括号“[ ]”中可以通过添加字符“^”来实现,如"[^a-z]"可以匹配到所有的非小写字母的字符。

        在不使用中括号时也可以实现“或”逻辑,那便是最经典的字符“|”,如输入“is|are”便可以匹配到所有的子串“is”和子串“are”的所在处。

        3.默认分类

        为了简化读写,正则表达式中不乏一些默认的、规范化的表述方式,大致如下所示。

.   --> 能够匹配到单个任意字符(换行符除外)
\d  --> 匹配任意单个数字,等价于[0-9]
\D  --> 匹配任意非数字字符,等价于[^0-9]
\w  --> 匹配任意字母数字下划线字符,等价于[A-Za-z0-9_]
\W  --> 匹配任意非\w可以匹配到的字符,等价于[^A-Za-z0-9_]
\s  --> 匹配任意空白字符,如空格、缩进符、换行符
\S  --> 匹配任意非空白字符

三、量词与贪婪匹配

       1.量词

        正则表达式中引入了许多量词的用法,从而更符合使用逻辑,也减少了书写正则表达式的工作量。具体的量词含义如下。

*     --> 匹配0次或者多次前面的元素
+     --> 匹配1次或者多次前面的元素
?     --> 匹配0次或者1次前面的元素
{n}   --> 确切匹配n次前面的元素
{n,}  --> 匹配n次或更多次前面的元素
{n,m} --> 匹配n次到m次前面的元素

        如在编辑器中写入“is{2}”,便只能匹配到字符串“iss”而不能匹配到“is”。那如果想要匹配到“isis”或者“isisis”等等要怎么做呢?我们可以用接下来第四章节提到的分组匹配来实现。

        2.贪婪匹配

        量词后面加上字符'?'即表示此次为非贪婪匹配,满⾜匹配条件之后,即使后⾯依然符合条件也不会再继续匹配了。

{n,}? --> 匹配n次前面的元素。此时{n} = {n,}? = {n,m}?

四、分组匹配

        1.分组并捕获

        通过小括号“( )”可以实现分组捕获,进而得到更加复杂的正则匹配。如“(is)”便是将“is”视作一个整体来处理,这便是分组。而捕获则更多用于数据提取和数据替换等操作。如下图输入“/(n)(a[a-z])/gm”便可以得到数个匹配的子串,光标移到子串上便可以查看到详细的信息,其中group #1、group #2便是我们使用小括号进行分组的结果,之后我们便可以使用“$1”与“$2”分别对匹配到的字符“n”和子串“an”、“ag”等进行操作处理,这便是捕获。

        2.分组但不捕获

        通过在输入"(?:xxx)"可以实现对正则内容xxx的分组,但是并不会对其进行捕获,也就是不会通过$符号引用到xxx所匹配到的内容。

五、定位符

        符号'^'在中括号中表示匹配逻辑“非”,但在中括号外部则表示后跟的正则所匹配到的位置在行首。例如:“^Hello”匹配以“Hello”开始的行。

        符号'$'在捕获中起到了一种类似于“引用”的效果,在正则表达式中则表示匹配到行尾,与‘^’相对应。例如:“World$” 匹配以“World”结尾的行。

        符号“\b”表示匹配边界。例如,“\bin\b”就会精确确匹配单词“in”,而不会匹配单词“find”中的“in”。符号“\B”则表示匹配非单词边界,例如“\Bin\B”就完全不会匹配到单词“in”。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值