正则表达式(一)

一、示例:

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

  ^-?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
XZ
XZ匹配 X 后直接跟着 Z

2、字符集元字符

字符说明
\d匹配一个数字,是 [0-9] 的简写
\D匹配一个非数字,是 [^0-9] 的简写
\s匹配一个空格,是 [ \t\n\v\r\f] 的简写
\S匹配一个非空格,等同于[^\s]
\w匹配一个单词字符(大小写字母、数字、下划线),是 [a-zA-Z_0-9] 的简写
\W匹配一个非单词字符(除了大小写字母、数字、下划线之外的字符),等同于 [^\w]

3、重复匹配

*	        匹配 >=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表示单词的边界(一个单词的开始或者结尾)例如\bcat\b可以匹配文档中的cat这个单词,而不匹配scattered

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

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


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

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

\ * + ( ) [ ] { } ?
这些符号出现在字符集合中(在[]中)时,不需要转义;相反'-'在[]外面不需要转义,在[]里面需要转义'\-'

下一篇:正则表达式(二)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值