您好,登錄后才能下訂單哦!
官方文檔如圖:
上圖是官方文檔的介紹,總結一下講了兩個知識點:
1、是否獲取匹配并保存匹配的值;
2、正向預查和反向預查。
一、解釋是否獲取匹配并保存匹配的值
1、()表示捕獲分組,獲取匹配,()把每個分組里的匹配的值保存起來;
2、(?:)表示非捕獲分組,獲取匹配,非捕獲分組匹配的值不會保存起來,可以提高程序執行速度;
3、(?=?!?<=?<!)表示非捕獲分組,不獲取匹配,也不保存匹配的值。
舉例說明:
// 是否獲取匹配測試文本 abxoxcd ..(xox).. 匹配 abxoxcd ..(?:xox).. 匹配 abxoxcd ..(?=xox).. 匹配 abxo 獲取匹配,一般匹配到了字符之后,該字符就被消耗、輸出。不獲取匹配,不會消耗字符。 // 是否保存匹配的值測試文本 AAABBCaaA E666FF (A)\\1* 匹配 AAA、A (\\w)\\1+ 匹配 AAA、BB、aa、666、FF (?:A)(B)\\1* 匹配 ABB
因為非捕獲分組不保存匹配的值,所以 (?:A)(B)\\1* 匹配 ABB 第一個\\1表示(B)這個捕獲組捕獲到的值。
“注意:反向引用表示捕獲到的值,而不是再次使用正則表達式”
二、解釋正向預查和反向預查
// 前瞻: exp1(?=exp2) 查找exp2前面的exp1 // 后顧: (?<=exp2)exp1 查找exp2后面的exp1 // 負前瞻: exp1(?!exp2) 查找后面不是exp2的exp1 // 負后顧: (?<!exp2)exp1 查找前面不是exp2的exp1
舉例說明:
// 正向預查和反向預查 測試文本 abxoxcd ..(?=xox) 匹配 ab ..(?=oxo) 匹配不到 (?=xox).. 匹配xo (?<=xox).. 匹配 cd
預查只需要記住:
1、環顧全局定位到非捕獲組;
2、不獲取匹配(不消耗字符),不保存匹配的值(不能使用反向引用)。
以上就是關于java正則?:、?=、?!的一些理解的詳細內容,更多請關注億速云其它相關文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。