「嘉年华观会」正则表达式(一)

2024-09-25 21:34:59 浏览数 (1)

一、示例:

匹配数字(可能带小数点)

代码语言:java复制
  ^-?d (.d )?$

解释:^是开始符,d表示数字, 表示至少有一个,.表示小数点.,小括号表示分组,?表示小括号内的语句是可选的。

二、基础规则

1、常见匹配符号

表达式

说明

[abc]

复选集定义,匹配字母 a 或 b 或 c

[abc] [vz]

复选集定义,匹配字母 a 或 b 或 c,后面跟着 v 或 z

[^abc]

当插入符 ^ 在中括号中以第一个字符开始显示,则表示否定模式。此模式匹配所有字符,除了 a 或 b 或 c

[a-d1-7]

范围匹配,匹配字母 a 到 d 和数字从 1 到 7 之间,而不是不匹配 d1

X

Z

XZ

匹配 X 后直接跟着 Z

2、字符集元字符

字符

说明

d

匹配一个数字,是 0-9 的简写

D

匹配一个非数字,是 ^0-9 的简写

s

匹配一个空格,是 tnvrf 的简写

S

匹配一个非空格,等同于^s

w

匹配一个单词字符(大小写字母、数字、下划线),是 a-zA-Z_0-9 的简写

W

匹配一个非单词字符(除了大小写字母、数字、下划线之外的字符),等同于 ^w

3、重复匹配

代码语言:bash复制
    *	        匹配 >=0 个,是 {0,} 的简写	X* 表示匹配零个或多个字母 X,.* 表示匹配任何字符串
     	        匹配 >=1 个,是 {1,} 的简写	X  表示匹配一个或多个字母 X
    ?	        匹配 1 个或 0 个,是 {0,1} 的简写	X? 表示匹配 0 个或 1 个字母 X
    {X}	        只匹配 X 个字符	d{3} 表示匹配 3 个数字,.{10} 表示匹配任何长度是 10 的字符串
    {X,Y}	    匹配 >=X 且 <=Y 个	d{1,4} 表示匹配至少 1 个最多 4 个数字
    {X,}     	匹配 >=X个 d{1,} 表示匹配至少有一个数字,效果和 一样

4、防止过度匹配

    上面的限定符中*, 和{X,}是“贪婪型”的,它们在进行匹配时表现为尽可能的匹配更多的字符,而不是匹配到碰到第一个匹配时为止。

    而要阻止这种“贪婪”的行为,我们可以在其后面加上?即可,即*?, ?, {X,}?。这些叫懒惰型,表现为碰到第一个匹配时就停止。

    我的理解是,贪婪型是从后往前匹配的懒惰型(懒惰就是匹配到第一符合就停止)。

5、位置匹配

a) 单词边界      b表示单词的边界(一个单词的开始或者结尾)例如bcatb可以匹配文档中的cat这个单词,而不匹配scattered

b) 字符串边界     ^表示字符串开头,$表示字符串结束     当^出现在字符集中([]中)开头时表示非,在外面并于一个模式开头时表示匹配字符串开始位置。

c) 分行匹配模式     当文本不止一行时,默认:^匹配第一行开始的位置,$匹配最后一行结尾的位置。     但是当在模式前加上(?m)时,就开启了分行模式:^匹配每一行开始的位置,$匹配每一行结束的位置。

<br> &nbsp;&nbsp;&nbsp;&nbsp; 例如:<b color='#000'>(?m)^s*//.*$</b>,可以匹配java和js中的单独一行注释 <br> &nbsp;&nbsp;&nbsp;&nbsp; 解释:(?m)代表开启分行模式,可以匹配多行注释;s*匹配//前面的空格;.*$匹配//后面到这行结尾的注释内容 如果没有(?m), 这个只能匹配第一行注释,并且一直匹配到文档结束,因为*是贪婪型

6、需要转义的字符(持续更新)

代码语言:bash复制
     *   ( ) [ ] { } ?
    这些符号出现在字符集合中(在[]中)时,不需要转义;相反'-'在[]外面不需要转义,在[]里面需要转义'-'

0 人点赞