正则表达式基础

1585364631
2022-04-14 / 0 评论 / 219 阅读 / 正在检测是否收录...
正则表达式

正则表达式

字符类

1.字符集

[ABC]

匹配集合中的任何字符

正则表达式:

[aeiou]

匹配结果:

glib jocks vex dwarves!

 

2.非字符集

[^ABC]

匹配不在集合中的任意字符

 

3.范围

[g-s]

匹配ASCII码在指定范围区间的字符

 

4.点(.)

.

字符代表匹配任何单个字符,它只能出现在方括号以外,不能匹配换行符,等价于[^\n\r]

 

5.完全匹配

[\s\S]

可以用来匹配所有字符,包括换行符,但是除了dotall标符(s).

另外一种形式是[^], 但是它不被所有浏览器支持

 

6.单词

\w

匹配字母、数字、下划线。 只匹配小ASCII码的字符(无声调字母或非罗马英文字符)。 等价于 [A-Za-z0-9_]

 

7.非词匹配

\W

匹配非字母、数字、下划线。 等价于[^A-Za-z0-9_]

 

8.数字

\d

匹配任意数字 (0-9). 等价于 [0-9]

 

9.非数字

\D

匹配任意非数字字符 (0-9). 等价于 [^0-9]

 

10.空白字符

\s

匹配任何空白字符。(空格, 制表符, 换行符)

 

11.非空白字符

\S

匹配任何非空白字符。(空格, 制表符, 换行符)

 

12.Unicode分类

\p{类别}

\p{letter} 在任何一个语言中都表示一个字母。\p{L} 是它的简写形式

主要类别:

  • 字母 L:

    • 小写字母 Ll,修饰语 Lm,大写首字母 Lt,全部大写 Lu,其他 Lo
  • 数字 N:

    • 数字 Nd,字母 Nl,其他 No
  • 标点 P:

    • 连接词 Pc,中划线 Pd,引号 Pi,引回 Pf,开始 Ps,结束 Pe,其他 Po
  • 标记(变音等)M:

    • 组合字符(有一定间隔)Mc,包围字符(一个或多个字符被另一些字符包围)Me,组合字符(无间隔)Mn
  • 标志 S:

    • 货币 Sc,修饰符号 Sk,数学 Sm,其他 So
  • 分隔符 Z:

    • 换行符 Zl,段落 Zp,空格 Zs
  • 其他 C:

    • 控制符 Cc,格式符 Cf,未提供的 Cn,非公用的 Co,帮助符 Cs

 

锚定

1.开头

^

匹配字符串开头,或者当使用多行标志(m)时,匹配一行的开头。 这个会匹配到位置,而不是字符。

 

2.结尾

$

匹配字符串结尾,或者当使用多行标志(m)时,匹配一行的结尾。 这个会匹配到位置,而不是字符。

 

3.词边界

\b

匹配一个单词边界,也就是指单词和空格间的位置。 详情见单词字符类(w)。

正则表达式:

s\b

匹配结果:

she sells seashells

 

4.非词边界

\B

匹配非单词边界。 这个会匹配到位置,而不是字符。

正则表达式:

s\B

匹配结果:

she sells seashells

 

转义符

1.保留字符

\

以下字符含有特殊含义, 应该以\(反斜杠)为开头,以表示文字字符:

+*?^$.[]{}()|/

在一个字符集中, 只有 \, -, 和 ] 需要被转义。

 

2.tab制表符

\t

匹配 TAB制表符 (字符编码 9)。

 

3.lf换行符

\n

匹配 LF换行符 (字符编码 10)。

 

4.纵向制表符

\v

匹配 纵向制表符(VERTICAL TAB) (字符编码 11)

 

5.换页符

\f

匹配 换页符(FROM FEED) (字符编码 12)

 

6.cr换行符

\r

匹配 CR换行符 (字符编码 13)

 

7.空(null)

\0

匹配 空(NULL) (字符编码 0)

 

区间

1.重复

{N}

在一个字符组后加上{N} 就可以表示在它之前的字符组出现N

正则表达式:

\d{4}

匹配结果:

0123

1234

2345

 

2.重复区间

{M,N},M是下界而N是上界

正则表达式:

\d{3,4}

匹配结果:

123

234

1234

2345

 

3.开闭区间

{M,}

闭区间不写即可表示匹配一个或无数个

+等价于{1,}

*等价于{0,}

正则表达式:

\d{0,}

匹配结果:

1

12

123

1234

 

分组

1.捕获分组

()

使用分组时,除了获得整个匹配。还能够在匹配中选择每一个分组

文本内容:

0731-8825951

正则表达式:

/(\d{4})-(\d{7})/

分别捕获

0731 8825951

 

2.通配

(.*?)

<p>hello</p>

正则表达式:

>(.*?)<

hello

 

3.或者

|

例如要提取所有图片文件的后缀名,可以在各个后缀名之间加上一个 |符号

正则表达式:

/(.(mp4|avi|wmv|rmvb))$/

匹配结果:

1.avi

2.mp4

 

4.非捕获分组

(?:表达式)

不捕获数据,还能使用分组的功能

 

5.分组的回溯匹配

\N

引用N编号的分组

匹配文本:

<font>提示<a></a></font>

正则表达式:

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

匹配结果:

提示<a>

这不是我们想要的结果,我们可以改成

正则表达式:

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

匹配结果:

提示<a></a>

 

断言

先行断言和后行断言只有一个区别,即先行断言从左往右看,后行断言从右往左看

 

正向先行断言

(?=表达式)

指在某个位置向右看,表示所在位置右侧必须能匹配表达式

匹配文本:

我喜欢你 我喜欢我

正则表达式:

喜欢(?=你)

匹配结果:

喜欢你 我喜欢我

 

反向先行断言

(?!表达式)

指在某个位置向右看,保证右边不能符合表达式

 

正向后行断言

(?<=表达式)

指在某个位置向左看,表示所在位置左侧必须能匹配表达式

 

反向后行断言

(?<!表达式)

指在某个位置向左看,表示所在位置左侧不能匹配表达式

0

评论 (0)

取消