正則表達式(二)

六、SubExpression
SubExpression是子表達式的意思,將正則表達式分層,一個表達式中可以包含子表達式,SubExpression用圓括號()來分隔,()內的表達式作為一個個體來對待,考慮下面這個例子。
文本:
Hello, my name is Ben Forta, and I am the author of books on SQL, ColdFusion, WAP,Windows  2000, and other subjects.
正則表達式:
 {2}
匹配結果:
Hello, my name is Ben Forta, and I am the author of books on SQL, ColdFusion, WAP,Windows  2000, and other subjects.
 
說明:為什麼會沒匹配到呢?因為{2}只修飾其前一個描述符,也就是 ; ,所以這樣是匹配不到的。但是如果正則表達式是:
( ){2}
則匹配結果為:
Hello, my name is Ben Forta, and I am the author of books on SQL, ColdFusion, WAP,Windows  2000, and other subjects.
 
子表達式的嵌套與枚舉
SubExpression是可以嵌套的,看下面這個例子。
假設我們要匹配一段文字中的考試成績,這個成績是百分制的數字,小數位最多只有一位,且必須是0.5,假設文本如下:
小明的考試成績是95.5,小華的考試成績是100,小劉的成績是32,小張的成績是76.3。
正則表達式:
((0|[1-9][/d])(/.5))|(0|[1-9][/d])|100
那麼匹配結果是:
小明的考試成績是95.5,小華的考試成績是100,小劉的成績是32,小張的成績是76.3。
 
說明:多外並列的多選一的subexpression之間用 | 隔開,表示或者的意思。
 
 
七、前引匹配
請看下面這個例子。
文本:
<H2>Wireless</H2>
Information about Bluetooth, 802.11, and more.
<H2>This is not valid HTML</H3>
正則表達式:
<[hH][1-6]>.*?</[hH][1-6]>
匹配結果:
<H2>Wireless</H2>
Information about Bluetooth, 802.11, and more.
<H2>This is not valid HTML</H3>
 
很明顯,顯後一行<H2>This is not valid HTML</H3>的匹配結果不是我們想要的,因為它是以<H2>開頭卻以</H3>結尾。
那麼如果要做這一點,正則表達式該如何寫呢?
可以這樣寫:
<[hH] ([1-6]) >.*?</[hH] /1 >
那麼這樣的話,上述例子的匹配結果就是:
<H2>Wireless</H2>
Information about Bluetooth, 802.11, and more.
<H2>This is not valid HTML</H3>
 
說明: /1 表示參照引用前面表達式中的第一個subexpression,如果是 /2 ,就表示參照引用前面表達式中的第二個subexpression.可以看出上述例子中 /1 參照引用了 ([1-6]) ,這個 參照引用 含有一個順序一致的意思,就是說,如果 ([1-6]) 匹配的是1,那麼這裡也只能匹配1,如果 ([1-6]) 匹配的是2,這裡也只能匹配2。
 
八、頭尾條件匹配
舉例說文本:
<title>some words</title>
我只想要匹配以<title>開始,並以</title>結束的內容,但匹配的結果不要包含<title>和</title>本身。那麼,正則表達式可以這樣寫:
( ?<= <title>).*( ?= </title>)
這樣的話匹配結果就是:
<title>some words</title>
 
說明: ?<= 後跟著的是匹配的結果的前置內容, ?= 跟著的是匹配結果的後置內容。而且,如果前置或後置內容是多個字符的話,請用()將其包起來。
 
相反的情況
好,那麼我們很自然的會想到,我要匹配不以<title>和</title>為起始的內容。這時,用另外兩個語法符號:
(?!)和(?<!)
如下例。
文本:
<title>some words</title>
<body>some words</body>
正則表達式:
( ?<! <title>).*( ?! </title>)
匹配結果如下:
<title>some words</title>
<body>some words</body>
 
 
 

你可能感兴趣的:(正則表達式(二))