天天看點

正規表達式 學習筆記3.4

第一段為合法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