正则表达式

前瞻后顾

(?=X) X, via zero-width positive lookahead

(?!X) X, via zero-width negative lookahead

(?<=X) X, via zero-width positive lookbehind

(?<!X) X, via zero-width negative lookbehind

前瞻(Lookahead)和后顾(Lookbehind)

正则表达式引擎是从文本头部向尾部开始解析的(可以设置解析方向),
因此文本尾部的方向,称为“前”(正则引擎还没解析),
而对文本头部方向,称为“后”,(正则引擎已经解析)

所谓的前瞻就是在正则表达式匹配到某个字符的时候,往“尚未解析过的文本”预先看一下,看是不是符合/不符合匹配模式,
而后顾,就是在正则引擎已经匹配过的文本看看是不是符合/不符合匹配模式。

肯定式匹配(positive)和否定式匹配(negative)

符合和不符合特定匹配模式我们又称为肯定式匹配(positive)和否定式匹配(negative)。
肯定式匹配时则当符合特定模式时停止,否定式匹配则当不符合特定模式时停止。

贪婪型量词、勉强型量词、占有型量词

文本:

 <p>first</p> yeah

贪婪型量词正则表达式

<.*> 
匹配<p>first</p>

勉强型量词正则表达式

<.*?>
匹配<p>

文本:

<p>one</p> two

占有型量词正则表达式

<.*+>
无匹配结果

当引擎发现.的重复次数达到最大了,引擎读取了之后的>,发现匹配不了,这时引擎知道重复最大次数是不行的,然后整个匹配就失败了,引擎不会去尝试其他的重复次数。

占有型量词正则表达式

<[^>]*+>
匹配<p>

当引擎发现[^>]的重复次数达到最大了,引擎读取了之后的>,发现匹配了

占有型量词可以提高匹配的效率,因为它不会遍历所有可能性去匹配一段字符串,它只匹配重复次数最大的那种可能,行就行,不行就不行。如果我们需要的结果只有在最大重复次数时才会出现,那其余的尝试都是不必要的。
比如,我们要得到文本<p>one</p> two中每对尖括号包裹的内容,那我们可能会用<.*?>,但我们也可以用表达式<[^>]*+>。后者效率更高,因为它不用尝试其他的可能性。

replaceAll 和 appendReplacement

http://my.oschina.net/shipley/blog/98973

参考

正则基础之——NFA引擎匹配原理
https://blog.csdn.net/lxcnn/article/details/4304651

使用正则表达式找出不包含特定字符串的条目
http://www.imkevinyang.com/2009/08/使用正则表达式找出不包含特定字符串的条目.html

正则表达式中的量词
https://www.jianshu.com/p/1706e594f7c7

JAVA 正则表达式         
http://blog.csdn.net/allwefantasy/article/details/3136570/

正则表达式全部符号解释
http://www.cnblogs.com/yirlin/archive/2006/04/12/373222.html

浅析正则表达式—(原理篇)
https://www.cnblogs.com/dwlsxj/p/3532458.html

深入入门正则表达式(java)
http://blog.csdn.net/su1216/article/details/8662027

正则表达式
http://blog.csdn.net/shangboerds/article/details/7632217
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值