正規表示式學習教程之回溯引用backreference詳解
本文例項講述了正規表示式回溯引用backreference。分享給大家供大家參考,具體如下:
在所有例子中正規表示式匹配結果包含在源文字中的【和】之間,有的例子會使用Java來實現,如果是java本身正規表示式的用法,會在相應的地方說明。所有java例子都在JDK1.6.0_13下測試通過。
一、問題引入
一個在HTML頁面中匹配標題標籤(H1—H6)的問題:
文字:
<body> <h1>Welcome to my page</H1> Content is divided into twosections:<br> <h2>Introduction</h2> Information about me. <H2>Hobby</H2> Information about my hobby. <h2>This is invalid HTML</h3> </body>
正規表示式: <[hH][1-6]>.*?</[hH][1-6]>
結果:
<body>
【<h1>Welcome to my page</H1>】
Content is divided into twosections:<br>
【<h2>Introduction</h2>】
Information about me.
【<H2>Hobby</H2>】
Information about my hobby.
【<h2>This is invalid HTML</h3>】
</body>
分析:模式<[hH][1-6]>匹配任何一級標題的開始標籤,而且不區分大小寫,在這個例子中它匹配到了<h1>、<h2>,</[hH][1-6]>匹配到了</h1>、</h2>、</h3>;這裡使用了懶惰型元字元來匹配標籤中的文字,否則會匹配到從第一個開始標籤到最後一下結束標籤之間的內容。但是從結果可以看出,有一個無效的標籤也匹配上了,即<h2></h3>,它們根本不能配對。要解決這個問題,就需要使用到回溯引用(backreference)。
二、回溯引用匹配
回溯引用是指模式的後半部分引用在前半部分中定義的子表示式。至於子表示式的使用、劃分和引用,在前面已經介紹過了。現在來解決前面的例子:
文字:
<body> <h1>Welcome to my page</H1> Content is divided into twosections:<br> <h2>Introduction</h2> Information about me. <H2>Hobby</H2> Information about my hobby. <h2>This is invalid HTML</h3> </body>
正規表示式: <[hH]([1-6])>.*?</[hH]\1>
結果:
<body>
【<h1>Welcome to my page</H1>】
Content is divided into twosections:<br>
【<h2>Introduction</h2>】
Information about me.
【<H2>Hobby</H2>】
Information about my hobby.
<h2>This is invalid HTML</h3>
分析:首先匹配開始標題標籤的模式<[hH]([1-6])>,使用括號把[1-6]做為子表示式,而匹配結束標題標籤模式為</[hH]\1>,其中\1表示引用第一個子表示式,即([1-6]),如果([1-6])匹配到的是1,那\1也匹配到1,如果匹配到2,那\1也匹配到2,所以最後一個無效的標題標籤就不會被匹配到了。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70015103/viewspace-2871363/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- AS3 js正規表示式 反向引用(backreference)S3JS
- 正規表示式教程之位置匹配詳解
- 正規表示式教程之匹配一組字元詳解字元
- 正規表示式教程之匹配單個字元詳解字元
- 詳解正規表示式
- 正規表示式教程之操作符及說明詳解
- Python正規表示式詳解Python
- Linux正規表示式詳解Linux
- 詳解 Python 正規表示式Python
- 正規表示式回溯-導致CPU偏高
- Go 正規表示式學習Go
- 正規表示式分組詳解
- MySQL-正規表示式詳解MySql
- Python正規表示式 findall函式詳解Python函式
- 正規表示式學習和練習
- 正規表示式學習筆記筆記
- 如何快速學習正規表示式
- 正規表示式入門學習
- Python 正規表示式模組詳解Python
- 正規表示式詳解及實戰
- python爬蟲 正規表示式詳解Python爬蟲
- js正規表示式常用函式詳解(續)JS函式
- 正規表示式例項蒐集,通過例項來學習正規表示式。
- 通過js正規表示式例項學習正規表示式基本語法JS
- Python學習筆記 - 正規表示式Python筆記
- java 正規表示式語法學習Java
- 正規表示式學習(2)---字元特性字元
- 學習正規表示式(js、C#)JSC#
- Python3之正規表示式詳解Python
- 正規表示式分組例項詳解
- 正規表示式複習
- Oracle中的正規表示式(及函式)詳解Oracle函式
- Python正規表示式保姆式教學,帶你精通大名鼎鼎的正則Python
- 正規表示式(初學)
- JavaScript正規表示式學習筆記(一)JavaScript筆記
- 正規表示式re.compile的學習Compile
- js正規表示式基本語法學習JS
- 從 Vue parseHTML 來學習正規表示式VueHTML