正则表达式入门

目录

一、限定符

1、?

2、*

3、+

4、{}

5、()

6、|

7、[]

二、元字符

三、懒惰与贪婪匹配

四、分组

1、捕获式分组

2、非捕获式分组

五、回溯引用

六、环视

1、正向先行断言

2、反向先行断言

3、正向后行断言

4、反向后行断言


一、限定符

1、?

代表前面一个的一个字符需要出现0或1次,即可有可无。

例:

used?:匹配use或used

2、*

代表前面一个字符出现0或多次

例:

ab*c:匹配ac/abc/abbbbbbbc

3、+

代表前面一个字符出现一次以上

例:

ab+c:匹配abc/abbbbbc

4、{}

精确匹配前面一个字符出现的次数

例:

ab{6}c:匹配abbbbbbc
ab{2,6}c:匹配b出现了2-6次的
ab{2,}:匹配b出现了2次以上的

*类似于{0,};+类似于{1,}。

5、()

用于多个字符的匹配

例:

(abc){3}:匹配abcabcabc

6、|

或运算符

例:

a (cat|dog):匹配a cat或a dog

7、[]

限定只能匹配【】内的限定字符

例:

[abc]*:匹配所有由a、b、c组成的字符
[0-9]:匹配所有的数字字符
[a-z]:匹配所有的小写字符
[A-Z]:匹配所有的大写字符
[a-zA-Z0-9]:匹配所有的英文和数字
[Pp]ython:匹配Python或python

二、元字符

语法说明
.匹配行首
^匹配行尾
$匹配任意字符(不包括Tab和换行符)
\d+数字字符,类似于[0-9]
\w+单词字符,类似于[a-zA-z]
\s+空白字符
\b标识字符的边界
\D+非数字字符,类似于[^0-9]
\S+非空白字符
\W+非单词字符,类似于[^a-zA-Z]
/B匹配不是单词开头或结束的位置

三、懒惰与贪婪匹配

贪婪匹配:正则表达式默认匹配尽可能多的字符。

懒惰匹配:用?(跟在+或*后面)将贪婪匹配切换为懒惰匹配,匹配尽可能少的字符。

代码/语法说明
*?重复任意次,但优先匹配少重复的字符串
+?重复1次或更多次,但优先匹配重复1次的字符串
??重复0次或1次,但优先匹配0次的字符串

例:

a.*b:匹配最长的以a开始,以b结束的字符串。
//如果我们需要匹配的是ab,就需要用到懒惰匹配。
a.*?b:匹配最短的以a开始,以b结束的字符串
\d{8,9}?:匹配8个数字

四、分组

用于将多个字符重复,主要通过使用小括号()来进行分组

1、捕获式分组

捕获括号内的内容

例:

(\d{4})[\-\s]?(\d{4})[\-\s]?(\d{2}):可以匹配类似2911-1415-34的字符串,并提取出2911 1415 34

2、非捕获式分组

用(?:表达式)来实现非捕获组,不捕获括号里的内容。

五、回溯引用

回溯引用是指模式的后半部分引用在前半部分中定义的子表达式。

例1:

有如下两个字符串:

123<font>提示</bar>abcd

123<font>提示</font>abcd

我们需要提取第二种,就可以用这样的正则表达式:

<(\w+)>(.*?)</\1>

这里的\1指的就是引用第一个括号里的子表达式。

例2:

编写代码匹配符合abba这种关系的单词,正则表达式如下:

(\w)(\w)\2\1

\2表示引用第二个括号的子表达式,\1表示引用第一个括号的子表达式。

六、环视

1、正向先行断言

从左往右看表达式所在右侧一定有表达式,语法:(?=表达式)

例:

匹配喜欢后面一定有你的字符串:喜欢(?=你)

2、反向先行断言

从左往右看表达式所在右侧一定没有表达式,语法:(?!表达式)

例:

排除QQ邮箱:(?!qq.com)

3、正向后行断言

从右往左看表达式所在左边一定有表达式,语法:(?<=表达式)

例:

喜欢前面一定有我,后面一定有你的字符串:(?<=我)喜欢(?=你)
所有的赵姓同学:(?<=赵)\S{2,4}

4、反向后行断言

从右往左看表达式所在右侧一定没有表达式,语法:(?<!表达式)

例:

爱国前一定没有不的字符串:(?<!不)爱国

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

趣多多代言人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值