正则表达式语法结构分析及难点介绍

一个学习连接
https://deerchao.net/tutorials/regex/regex.htm
下面是百度百科对正则表达式的解释

正则表达式是对字符串(包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为“元字符”))操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。正则表达式是一种文本模式,该模式描述在搜索文本时要匹配的一个或多个字符串

这里列出一些常用的特殊字符,详细内容参照谷歌或者去微软官网查看
微软正则表达式

学会正则表达式的关键,就在与搞清楚每个符号之间的关系,搞清楚关系之后,我们就可以进行有机则组合。
我将正则表达式大致分为四种类型,占位符数量表达符位置表达符条件表达符
提醒大家一点,此分类方法并不严谨,但是这样很好理解,学习此篇文章后,可在互联网参照其他文章。

占位符: 类似于字母,一个字母占一个位,匹配一个字母,那么特殊符号也匹配所代表的字符

符号意义
.匹配除换行符以外的任意字符
\w匹配字母或数字或下划线或汉字
\s匹配任意的空白符
\d匹配数字
[a,b,c]方括号占一个位置,表示在a b c中任意选择一个字符

数量表达符:占位符连用,一般跟在占位符的后面表示该占位符的数量,例子:\d{3}会匹配三个数字。

符号意义
*重复零次或更多次
+重复一次或更多次
?重复零次或一次
{n}重复n次
{n,}重复n次或更多次
{n,m}重复n到m次

位置表达符:占位符连用,表达要匹配的数据在字符串的哪里,\b是表达单词边界,例子:\ba\w+会匹配以单词以a开头的字符串,如abdapple之类的字符。

符号意义
\b匹配单词的开始或结束
^匹配字符串的开始
$匹配字符串的结束

条件表达式: 用于筛选符合条件的字符,在与占位符数量表达符位置表达符组合使用,例子:
(?<=the\s)apple会匹配,而不会匹配前面没有the的apple。

the apple apple apple the apple

表达式中的exp是需要的表达式

条件表达式意义
(?<=exp)用于判断条件该表达式(括号)的位置前面的内容是否符合exp,如果符合则匹配
(?=exp)用于判断条件该表达式(括号)的位置后面的内容是否符合exp,如果符合则匹配
(?<!exp)用于判断条件该表达式(括号)的位置前面的内容是否符合exp,如果符合则匹配
(?!exp)用于判断条件该表达式(括号)的位置后面的内容是否符合exp,如果符合则匹配

难点一:零宽断言与负向零宽断言

1、零宽断言

(?=exp)也叫零宽度正预测先行断言,它断言自身出现的位置的后面能匹配表达式exp。请读者仔细阅读下面的表达式,只要能读懂就可深度理解零宽断言
(?<=exp)也叫零宽度正回顾后发断言,它断言自身出现的位置的前面能匹配表达式exp。
首先我们先明白此类断言的性质–零宽断言是条件表达符,不占位
判断逻辑是:如果=号后面条件与被匹配文本相吻合,则匹配吻合筛选条件的文本(不包含条件)
请仔细观察上面四幅图的变化,以发现内在规律。
例子:
零宽断言
设置两组对比文本,123456789123406789,只有中间的0和5不同
以下用自然语言解读4幅图
1:如果该条件((?=))所在位置后面的数字是0,则匹配符合该条件的字符串中的非条件表达符部分,有点拗口,也就是说,表达式(1234\d6789)只匹配4后面的数字为0的字符串。
2:如果该条件((?=))所在位置后面的数字是5,我就匹配符合该条件的字符串中的非条件表达符部分,有点拗口,也就是说,表达式(1234\d6789)只匹配4后面的数字为5的字符串。
3:如果该条件((?<=))所在位置前面的数字是0,则匹配符合该条件的字符串中的非条件表达符部分,有点拗口,也就是说,表达式(1234\d6789)只匹配4前面的数字为0的字符串。
3:如果该条件((?<=))所在位置前面的数字是5,则匹配符合该条件的字符串中的非条件表达符部分,有点拗口,也就是说,表达式(1234\d6789)只匹配5前面的数字为0的字符串。
该表达是只是条件表达符,用来筛选文本,不进行输出匹配,而对于?=?<=的区别以上例子表达的很清楚了,即,没有<的向后匹配,有<的向前匹配。

2、负向零宽断言

与正向断言类似,只需要把=改成!仔细观察便知。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值