第一段為合法html代碼,第二段為不合法html代碼。
[^<]+比對非<的任意多個字元
開頭用來比對開始tag
結尾用來比對結束tag
中間用來比對文本。
發現這個正規表達式,既能比對合法,又能比對不合法的。
因為比對開始tag和結束tag的兩個子表達式,并沒有什麼聯系,也就是說比對的結束tag并不等于開始的tag
下面用反向引用在兩個子表示之間建立聯系:
String regex = "<(\\w+)>[^<]+</(\\1)>";
運作結果:
<h1>good,good</h1>能夠比對正則:<(\w+)>[^<]+</(\1)>
<h1>bad</h2>不能夠比對正則:<(\w+)>[^<]+</(\1)>
對比對開始tag的子表達式添加捕獲分組:
在比對結束tag的子表達式中,使用\1這個反向引用的功能:
補充:
一些題外話;使用正規表達式替換的時候,也可以使用反向引用的功能。
例子:
public class GeneralEvelent {
public static void main(String[] args) {
String dupWords = "word word";
String dupWordRegex = "(\\w+)\\s+(\\1)";
System.out.println("替換之前:"+dupWords);
System.out.println("替換之後:"
+dupWords.replaceAll(dupWordRegex, "$1"));
}
替換之前:word word
替換之後:word
簡單的去掉重複單詞的例子
dupWords.replaceAll(dupWordRegex, "$1")
$1按照java語言規定,這個特殊變量對應的是正規表達式中編号為1的分組所捕獲的字元串。
也就是說将兩個重複單詞的字元串,替換為單個重複單詞的字元串,這樣就去掉了一個重複單詞。
小結
·量詞:規定之前元素出現的次數
·*,+,?
·區間量詞:{min,max}
·量詞的局限:括号(...)的使用
·括号的用途:多選分支
·括号的用途:捕獲分組
·括号的用途:反向引用
正規表達式 學習筆記3 完!
本文轉自jooben 51CTO部落格,原文連結:http://blog.51cto.com/jooben/317570