正则有贪婪与非贪婪模式。(默认贪婪) 何谓贪婪,看下图。
匹配结果是aabbaaccaa
,实际上aabbaa
也是符合条件的,这就是贪婪模式,默认匹配最长。
这就是非贪婪模式。
* 和 + 限定符都是贪婪的,因为它们会尽可能多的匹配文字,只有在它们的后面加上一个 ? 就可以实现非贪婪或最小匹配。
正向预查,在任何开始匹配圆括号内的正则表达式模式的位置来匹配搜索字符串,一共有两种。
exp1(?=exp2)
:查找 exp2 前面的 exp1。
(?<=exp2)exp1
:查找 exp2 后面的 exp1。
负向预查,在任何开始不匹配该正则表达式模式的位置来匹配搜索字符串。同样有两种。
exp1(?!exp2)
:查找后面不是 exp2 的 exp1。
(?<!exp2)exp1
:查找前面不是 exp2 的 exp1。