91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java的正則?:?=?!是什么意思

發布時間:2022-03-04 17:38:55 來源:億速云 閱讀:352 作者:iii 欄目:web開發

本文小編為大家詳細介紹“Java的正則?:?=?!是什么意思”,內容詳細,步驟清晰,細節處理妥當,希望這篇“Java的正則?:?=?!是什么意思”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。

Java 正則?:?=?!的理解

Java的正則?:?=?!是什么意思

1:解釋是否獲取匹配并保存匹配的值

  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)這個捕獲組捕獲到的值。  “注意:反向引用表示捕獲到的值,而不是再次使用正則表達式”

這里用到了一個新的知識點,反向引用。

  Java的正則?:?=?!是什么意思

  1、正則表達式中  “\number” 表示反向引用,表示引用一個捕獲組,需要和小括號 “()” 一起使用

  2、正則捕獲組的下標從 0 開始,下標為 0 的組是整個表達式,下標為 1 的表示從左到右開始的第一個左括號所包含的值,后面的數字以此類推

  3、捕獲組在匹配成功時,會將子表達式匹配到的內容,保存到內存中一個以數字編號的組里,可以簡單的認為是對一個局部變量進行了賦值,這時就可以通過反向引用的方式,引用這個局部變量的值。

  4、反向引用必須要與捕獲組一同使用,如果沒有捕獲組,而使用了反向引用的語法,不同語言的處理方式不一致,有的語言會拋異常,有的語言會當作普通的轉義處理

2:解釋正向預查和反向預查

// 前瞻:
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、不獲取匹配(不消耗字符),不保存匹配的值(不能使用反向引用)

加餐

提問:強密碼(必須包含數字、小寫字母和大寫字母三種字符,即這三種字符的組合,且不能使用特殊字符,長度在8-16之間),你認為必須是 1個數字+1個小寫字母+1個大寫字母 這種順序嗎?

 ^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])[0-9a-zA-Z]{8,16}$

(?=.*[0-9])表示任意字符+一個數字

(?=.*[a-z])表示任意字符+一個小寫字母

  (?=.*[A-Z])表示任意字符+一個大寫字母

  [0-9a-zA-Z]{8,16}表示8-16個數字、大小寫字母

當有多個正向預查規則時它們是并列的,不是串行的

測試文本 abc2abc

  \\d(?=a)(?=b)  匹配不到

  \\d(?=a)(?=.b) 匹配 2   當然這是為了演示它的規則,其實可以寫 \\d(?=ab)

這里主要的原因是:不獲取匹配(不消耗字符)。

對于 ^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])[0-9a-zA-Z]{8,16}$ 
其實整個正則表示可以分為三部分:
/^(?=.*[0-9])[0-9a-zA-Z]{8,16}$/
/^(?=.*[a-z])[0-9a-zA-Z]{8,16}$/
/^(?=.*[A-Z])[0-9a-zA-Z]{8,16}$/
待匹配字符串必須同時滿足這三部分才可以

讀到這里,這篇“Java的正則?:?=?!是什么意思”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

邢台县| 西昌市| 谷城县| 栾城县| 石屏县| 酉阳| 安图县| 太白县| 杭锦后旗| 金坛市| 潜山县| 南召县| 宁安市| 浪卡子县| 五家渠市| 八宿县| 星子县| 班玛县| 莲花县| 邵阳市| 刚察县| 延寿县| 商丘市| 昌宁县| 基隆市| 静乐县| 商城县| 信阳市| 吉首市| 蓬安县| 遵义县| 玛沁县| 黄陵县| 汝州市| 巴南区| 昭通市| 胶南市| 丰县| 甘肃省| 玉龙| 荣成市|