以大局为重的匹配优先量词
在正则表达式中有三个匹配优先的量词,分别是*
, +
, ?
。
所谓匹配优先,其实就是日常说的贪婪,它们会尽可能的匹配更多的字符,换一种说法,它们一般会匹配大于下限,它们好像一群好久没吃饱饭的穷苦人民,有东西吃,当然要尽可能吃的更多啊!
比如说,现在有这样一个字符串
hello man!
如果我用 .*
去匹配,得到的将会是 hello man!
整个串。因为 *
是匹配优先的。、
尽管如此,有的时候国家利益大于个人利益,在有些情况下,它们不得不交还 “粮食” 给国家,尽管是匹配优先。
比如说我有下面的这个字符串
hello man1234
现在我用.*\d{4}
去匹配,你会发现 .*
只匹配了前面的 hello man
,后面的 1234
没有被匹配到,这是为啥,*
不是匹配优先的量词吗?
是是,但是有的时候匹配优先的量词也要以大局为重啊!它的匹配过程是这样的,首先执行的.*
会因为匹配优先把hello man1234
都匹配到,但是现在轮到\d{4}
了,如果.*
把所有的都匹配完了,那么整个正则就不可能匹配成功了,于是.*
开始交还4,发现还是不能满足,于是交还3,发现还是不能满足,一直到交还了1,现在可以满足匹配了,于是返回匹配成功。
所以说,匹配优先量词只是在以大局为重的情况下进行的匹配优先!!
大橘为重!!