举例:(?<=%%!).*(?=%%~)
(?<=%%!) 匹配一个位置,而不是字符.这个位置在 %%! 后面
(?=%%~) 匹配一个位置,而不是字符.这个位置在 %%~ 前面
.* 这两个位置之间的所有字符.贪婪匹配模式
.*? 这两个位置之间的所有字符.懒惰匹配模式,也叫非贪婪模式
贪婪匹配:匹配到结束
非贪婪匹配:有多个的会匹配多个
案例:
$abc>=10&&$ABC<20
希望匹配$abc和$ABC,也就是>= <这些符号前的内容。
使用正则:
/.*?(?=>|<)/
1、为什么不使用 .* 呢?
答:如果使用.*,会只匹配到一次,也就是$abc>=10&&$ABC<20。
2、?= 是什么?
非捕获元(有3个):?: ?= ?!
选择:用圆括号将所有选择项括起来,相邻的选择项之间用 | 分隔。但用圆括号会有一个副作用,使相关的匹配会被缓存,此时可用 ?: 放在第一个选项前来消除这种副作用。
?= 正向预查,在任何开始匹配圆括号内的正则表达式模式的位置来匹配搜索字符串
?! 负向预查,在任何开始不匹配该正则表达式模式的位置来匹配搜索字符串。