1. 程式人生 > >2.正則表示式-完結

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