正则表达式(组合使用部分)

上一篇写了单个正则表达式字符的使用,现在讲讲正则表达式字符的组合使用,重复字符串,可以用小括号来指定子表达式(分组),然后指定重复的次数就行了。

比如ip地址,它是一个以点号分割,分割出四组数字,每组数字都是0到255的规律字符串,所以我们需要分组的写法,(\b{1,3}.){3}\d{1,3} 是一个简单的IP地址匹配表达式。\b{1,3}代表1到3位的数字,(\b{1,3}.){3} 表示1到3位再加一个. 重复3次(因为只有3个点),\d{1,3} 然后后面再加上一个1到3位的数字,这样就可以满足以点号分割,分割出四组数字的条件了。

但是,这样正则表达式虽然可以匹配正确的ip地址,还可以匹配到错误的iP地址(比如比255大数字,ip地址每组数字范围是0~255)

所以正确的写法应该是这样:((2[0-4]\b|25[0-5]|[01]?\d{1,2}).){3}(2[0-4]\d|25[0-5] |[01]?\d{1,2}) 。2[0-4]\b代表200~249 ,25[0-5] 代表250255,[01]?\d{1,2}代表0199,
[01]? 代表0或者1 (01和001也可以匹配到) d{1,2}代表匹配一位或两位数,所以合起来就可以匹配到0~199了,然后把(\b{1,3}.){3}\d{1,3}和2[0-4]\b|25[0-5]|[01]?\d{1,2}合起来就等到正确的ip地址表达式了。

后向引用:

使用小括号指定一个子表达式后,可以在表达式或其他程序中作进一 步处理。。默认情况下,每个分组会自动拥有一个组号,从左向右,第一个分组为1,第二个为2,以此类推。

后向引用用于重复搜索前面某个分组匹配的文本。例如,\1 代表分组1匹配的文本。
比如想获取到连续两个重复的字母:
在这里插入图片描述
你也可以给前面的分组取个名字,然后后面向引用这个分组 捕获 的内容,就可以了。
取名写法:(?exp),引用写法:\k,比如上面的([a-z])\1和(?[a-z])\k等价,匹配的也是连续两个重复的字母。PS: (?:exp) 为不捕获文本

注意!([a-z])\1和([a-z]){2}不等价!
([a-z]){2}意思是两个连续出现的字母,它不管这两个字母是否一样。

零宽断言:
(?=exp) 零宽先行断言,匹配exp前面的位置
(?<=exp) 零宽后行断言,匹配exp后面的位置
比如我想匹配,/Document/Notice/Image/之后 “style=之前的字符串,我们可以使用零宽先行断言和零宽后行断言把它指定出来。
在这里插入图片描述

替换:
替换就是将表达式匹配到的字符串替换为指定字符串,可以使用 $1、 2 等 来 引 用 对 应 分 组 的 值 , 将 之 前 的 替 换 掉 , 2 等来引用对应分组的值,将之前的替换掉, 2后面的引用和之前后项引用差不多,但$后面不能用引用名称,只能用序号。

比如,我想将aa替换成+a,匹配连续出现的字母并将第一个字母替换为+,第二个字母不变:
在这里插入图片描述

注释:
(?#注释) 这类型的组不对正则表达式的处理产生任何影响,只是阅读注释。
例: ([a-z])\1(?#捕获连续两个重复的字母)
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值