正则表达式Regex学习笔记

元字符:
\b:匹配单词的开始结束(start-end)
^:匹配字符串开始
$: 匹配字符串的结束
\d:匹配数字
.: 匹配除换行符以外的任意字符
\w:匹配字母、数字、下划线、汉字
\s:匹配任意空白符
[]:正则提供一个元字符中括号 [] 来表示区间条件
:转义字符,把元字符、限定符或者关键字转义成普通的字符
|:正则中通过“|”表示或,用来匹配多个匹配条件
():用小括号()来做分组,也就是括号中的内容作为一个整体

反义元字符(大写元字符中字母)
\B:匹配不是单词开始或结束的位置
\W:匹配不是字母、数字、下划线、汉字的字符
\S:匹配不是空白符的字符
\D:匹配不是数字的字符(匹配任意非数字的字符)

重复限定符
*:重复0次或更多次
+:重复一次或更多次
?:重复0次或1次
{n}:重复n次
{n,}:重复n次或更多次
{n,m}:重复n到m次

分组:()
重复限定符作用是其左边最近一个字符,如果想多个字符同时被限定,可以使用“分组”符号:小括号(),
正则表达式中用小括号()来做分组,也就是括号中的内容作为一个整体。
例如:^(ab)* :匹配字符串中以0个或多个ab开始

转义:
如果要匹配以“(ab)”开头的字符串,如何处理?
可以通过使用元字符“\”,
正则提供了转义的方式,也就是要把这些元字符、限定符或者关键字转义成普通的字符,就是在要转义的字符前面加个斜杠,也就是;
例子:解决上述问题办法:^((ab))*

条件或:|
如何判断字符符合多个条件,如国内号码都来自三大网,它们都有属于自己的号段,比如联通有130/131/132/155/156/185/186/145/176等号段,
如何匹配一个手机号是不是联通号,因为需要匹配多种号段的情况,这里用到了“或”的条件,正则中通过“|”表示或
例如:^(130|131|132|155|156|185|186|145|176)\d{8}$

区间:[]
上例中,130、131、132前缀都为13,
155、156前缀都为15
如何简写,可以通过元字符[],正则提供一个元字符中括号 [] 来表示区间条件。
上例可写为:^((13[0-2])|(15[56])|(18[5-6)|145|176)\d{8}$

零宽断言
1.正向先行断言:(?=pattern),匹配pattern前面内容,不返回本身

2.正向后行断言:(?<=pattern),匹配表达式pattern后面的内容,不返回本身

3.负向先行断言:(?!pattern),匹配非pattern表达式的前面的内容,不返回本身

4.负向后行断言:(?<!pattern),匹配非pattern表达式的后面的内容,不返回本身

捕获和非捕获
1.数字编号捕获组:(exp)

2.命名编号捕获组:(?exp)

3.非捕获组:(?:exp)

反向引用
获会返回一个捕获组,这个分组是保存在内存中,不仅可以在正则表达式外部通过程序进行引用,也可以在正则表达式内部进行引用,这种引用方式就是反向引用。

根据捕获组的命名规则,反向引用可分为:
数字编号组反向引用:\k
或\number
命名编号组反向引用:\k
或者’name’

1.数字编号组反向引用

2.命名编号组反向引用

用法:
引用第一个捕获组,根据反向引用的数字命名规则 就需要 \k<1>或者\1

贪婪和非贪婪
贪婪

贪婪匹配:当正则表达式中包含能接受重复的限定符时,通常的行为是(在使整个表达式能得到匹配的前提下)匹配尽可能多的字符,
这匹配方式叫做贪婪匹配。特性:一次性读入整个字符串进行匹配,每当不匹配就舍弃最右边一个字符,继续匹配,
依次匹配和舍弃(这种匹配-舍弃的方式也叫做回溯),直到匹配成功或者把整个字符串舍弃完为止,因此它是一种最大化的数据返回,能多不会少。

例1:
String reg="\d{3,6}";
String test=“61762828 176 2991 871”;

匹配结果:617628
匹配结果:176
匹配结果:2991
匹配结果:871
由结果可见:本来字符串中的“61762828”这一段,其实只需要出现3个(617)就已经匹配成功了的,但是他并不满足,而是匹配到了最大能匹配的字符,也就是6个。
一个量词就如此贪婪了,

例子2:
String reg="(\d{1,2})(\d{3,4})";
String test=“61762828 176 2991 87321”;
匹配结果:617628
匹配结果:2991
匹配结果:87321

“617628” 是前面的\d{1,2}匹配出了61,后面的匹配出了7628
“2991” 是前面的\d{1,2}匹配出了29 ,后面的匹配出了91
"87321"是前面的\d{1,2}匹配出了87,后面的匹配出了321

非贪婪(懒惰)
懒惰匹配:当正则表达式中包含能接受重复的限定符时,通常的行为是(在使整个表达式能得到匹配的前提下)匹配尽可能少的字符,
这匹配方式叫做懒惰匹配。特性:从左到右,从字符串的最左边开始匹配,每次试图不读入字符匹配,匹配成功,则完成匹配,
否则读入一个字符再匹配,依此循环(读入字符、匹配)直到匹配成功或者把字符串的字符匹配完为止。

懒惰量词是在贪婪量词后面加个“?”

*?:重复任意次,但尽可能少重复
+?:重复1次或更多次,但尽可能少重复
??:重复0次或1次,但尽可能少重复
{n,m}?:重复n到m次,但尽可能少重复
{n,}?:重复n次以上,但尽可能少重复

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值