正则表达式 学习笔记

最近在学习正则表达式,确实是略难呀,下面就几个不甚理解的点做了点笔记。

1. 为什么要添加^$?

答:加^$的话就代表把整个要匹配的字符串当成一个整体做一次匹配,而不加则一个字符串可以匹配多次,只能代表这个字符串中有符合条件的并不代表改字符串符合条件。

例子:

test: <h> <h2> <h> <h> <h> <h>

regex1:<h>

result1: <h> <h2> <h> <h> <h> <h>

regex2:^<h>$

result2: <h> <h2> <h> <h> <h> <h>


2.为什么(hh+)\1+^(hh+)\1+$对于hhhhhhhhh(9个h)匹配结果不一样?

答:正则表达式匹配存在回溯,其匹配存在顺序,前者不是针对整个表达式进行最优匹配,得到解即可;后者由于要匹配整个表达式,所以必然要得到最优解。查看匹配过程即可知。

前者匹配过程:                                        后者匹配过程:

hhhhhhhhh 最大程度满足(hh+)                           前几步同,但是当满足前者匹配完成的条件时,后者仍无法匹配成

backtrack 不满足/1+                                   功,因为是对整个表达式匹配,必须全部满足条件

hhhhhhhh 最大程度满足(hh+)                            hhhh 最大程度满足(hh+)

backtrack 不满足/1+                                   backtrack 不满足/1+

以此类推,直到                                        hhh 最大程度满足(hh+)

hhhh 最大程度满足(hh+)                                hhhhhhhhh 满足/1+,匹配成功

hhhhhhhh 满足/1+,匹配成功


3.\1的作用是什么?

答:\1配合()使用,表示为()内匹配成功的内容,又名后向引用。乍一看好像没什么用处,下面用一个例子表示其区别:

对于正则表达式(ab+){2,}和(ab+)\1+,前者实际表示的是(ab+)(ab+)(ab+)...,而后者表示的是(ab+)[前面匹配的内容][前面匹配的内容][前面匹配的内容]...,具体表现为前者可以匹配abbbababbabbbbbb,而后者只能匹配abbabbabbabbabb。


4.关于?:所起到的非获取匹配是什么?以及正向预查、负正向预查、反向预查、负反向预查是什么?

答:在此博文中有详解。http://yimi128.iteye.com/blog/1436659


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值