舉例:(?<=%%!).*(?=%%~)
(?<=%%!) 匹配一個位置,而不是字符.這個位置在 %%! 后面
(?=%%~) 匹配一個位置,而不是字符.這個位置在 %%~ 前面
.* 這兩個位置之間的所有字符.貪婪匹配模式
.*? 這兩個位置之間的所有字符.懶惰匹配模式,也叫非貪婪模式
貪婪匹配:匹配到結束
非貪婪匹配:有多個的會匹配多個
案例:
$abc>=10&&$ABC<20
希望匹配$abc和$ABC,也就是>= <這些符號前的內容。
使用正則:
/.*?(?=>|<)/
1、為什么不使用 .* 呢?
答:如果使用.*,會只匹配到一次,也就是$abc>=10&&$ABC<20。
2、?= 是什么?
非捕獲元(有3個):?: ?= ?!
選擇:用圓括號將所有選擇項括起來,相鄰的選擇項之間用 | 分隔。但用圓括號會有一個副作用,使相關的匹配會被緩存,此時可用 ?: 放在第一個選項前來消除這種副作用。
?= 正向預查,在任何開始匹配圓括號內的正則表達式模式的位置來匹配搜索字符串
?! 負向預查,在任何開始不匹配該正則表達式模式的位置來匹配搜索字符串。