2.正則表示式-完結
前言:內容包括正則表示式的子表示式,回溯引用,前後查詢,嵌入條件,以及例子的拆分介紹。如果文字描述有問題可以評論指出,如果概念很模糊,可以關注微信公眾號,JAVA知識總結與分享。
子表示式
介紹:把一個表示式劃分為多個子表示式,每個都是一個獨立的元素,相關元字元()
正則:\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3}
注:這只是一個匹配文字中ip的正則,對於,666.666.666.666這種非ip的數值,也是可以匹配到的。不過我們這裡只是提取文字中的ip。要匹配正確的ip,可以自己嘗試一下。
解析:\d 代表數字,出現1到3次,這個重複的表示式寫了四次,但是毫無疑問,這個是能匹配到文字中的正確的ip的。但是這個看起來比較麻煩,這種情況其實我們就可以使用子表示式
利用子表示式:(\d{1,3}\.){3}\d{1,3}
利用子表示式正則解析:
(\d{1,3}\.){3}表示這個(\d{1,3}\.)重複三次,對應ip地址的前三位地址,\d{1,3}表示匹配ip地址的最後一組數字
回溯引用
定義:後半部分引用前半部分中定義的子表示式
正則表示式 :<h[1-6]>.*?</h[1-6]>
解析: [1-6]建立了一個數字組,<h[1-6]>表示<h1>,<h2>......<h6>,
.*?這裡用了懶惰型字元,在頁面中,正常來說,</h*>後面是有一個換行符的。元字元.不匹配換行符,如果沒有換行符,貪婪型可能會從<h1>直接匹配到</h5>,為了保險起見,用懶惰型肯定是沒有錯的。
</h[1-6]>表示</h1>,</h2>......</h6>,
但是這個正則表示式會將 <h4>今天。。</h5> 也給匹配出來。這個時候我們可以利用回溯引用來實現
正則表示式:<h([1-6])>.*?</h\1>
解析:([1-6])把這個提成一個子表示式,</h\1> \1代表引用子表示式的結果,\1--第一個子表示式的結果
利用回溯引用來替換字串:
解析:$1代表替換的時候引用的第一個子表示式,$2是第二個
大小寫轉化
-
\E 結束轉化
-
\l 把下一個字母轉化為小寫
-
\L 把/L與\E之間的字元全部替換為小寫
-
\u 把下一個字母轉化為大寫
-
\U 把\U與\E之間的字元全部轉化為小寫
向前向後查詢
正則表示式:(?<=\$)[0-9.]+
解析:(?<=\$)?<= 表示向$符號後面查詢
正則表示式:.+(?=\$) 向$符號前面查詢
操作符:
(?=) |
正向前查詢 |
(?!) |
反向前查詢 |
(?<=) |
正向後查詢 |
(?<=) |
反向後查詢 |
嵌入條件
語法:(?(條件)滿足情況下執行|不滿足情況下執行)
測試正則:(?=-)(?(1)\w|\s)
解析:(?=-) 向前查詢一個 - 字元
(?(1)\w|\s) 如果(?=-) 條件執行成功 ,即 - 字元存在,匹配一個\w否則匹配一個\s