正则表达式入门(七)量词
1 22 333 4444 55555 666666 7777777 88888888 999999999 0000000000
将排列成直角三角形的数字粘贴到程序中。
贪心,懒惰和占有
量词本身是贪心的,贪心的量词会首先匹配整个字符串。尝试匹配时,它会选定尽可能多的内容,也就是整个输入。量词首次尝试匹配整个字符串,如果失败则回退一个字符后再尝试,这个过程叫做回溯。它每次回退一个字符,知道找到匹配内容或者没有字符尝试为止。
懒惰的意思就是它从目标的起始位置开始尝试寻找匹配,每次检查字符串的一个字符。最后它会尝试匹配整个字符串。要使一个量词成为懒惰的,必须在普通量词后添加一个问好?
占有量词会覆盖整个目标然后尝试寻找匹配内容,但它只尝试一次,不会回溯。占有量词就是在普通量词之后添加一个加号。
用*,+和?进行匹配
在工具中输入
.*
它会以贪心的方式匹配文本中的所有字符。*匹配任何字符零次或多次。
贪心的量词
匹配特定次数
使用花括号可以限制某个模式在某个范围内匹配的次数,未修饰的量词是贪心量词。
例如:
7{1}
会匹配第一次出现的7,要匹配一个或多个7,只需要加一个逗号:
7{1,}
所以,7+其实和7{1,}是一样的。
那么,7*其实和7{0,}是一样的。
最后,7?其实和7{0,1}是一样的
范围语法
懒惰量词
在工具中用?来匹配零个或一个5
5?
再加一个?使量词编程懒惰的
5??
现在它不匹配任何内容了,因为现在的模式是懒惰的。它不会强制匹配第一个5,懒惰的基本特性就是匹配尽可能少的字符。
试一下匹配零个或多个
5*?
它也不匹配任何内容,因为它选择匹配最少的次数,零次。
试一下匹配一个或多个
5+?
它匹配了一个5,它选择了最少的次数,一次。
使用m和n的方式也是一样的
5{2,5}?
它将匹配2个5,而不是5个。
如果你想匹配最少而不是最多的数目,就使用懒惰量词。
占有量词
占有式量词很像贪心式量词,它会选择尽可能多的内容,但它不回溯。它不会放弃找到的内容,它很自私。优点是速度快。
我们先匹配以零开头的多个零,然后再匹配以零结尾的多个零。
0.*+
所有零都被标亮了。
.*+0
不匹配任何内容。因为它没有回溯,一下子选定了所有的输入,不再回来查看。它一下子没有在结尾找到零,也不知该从哪里找起。