如果我們要同時比對數個通用式,可以使用「|」將他們串起來,而達到「或」(OR)的邏輯運算效果,例如,如果我們要同時比對信用卡號碼、身份證字號、電話號碼,可參見下列範例:
若是要進行 OR 運算的通用式有共通的部分,我們就需要使用小括弧來進行更明確的規範,例如下列範例,可以同時比對 Chapter 和 Section,以及後續的數字:
小括弧也可以用來進行重複字串的比對,詳見前一節的說明。
除了用來規範比對的方式外,小括弧還有一個非常重要的功能,就是可以將對應於小括弧的子字串傳回來,非常適用於特定子字串的抽取。這部分的資訊是經由 regexp 指令的第三個輸出變數所傳回,例如:
在上例中,token 就是由 b 和 t 所夾的字串。
通用式在使用「貪心比對」時,會採用「越左越貪」的原則,例如在使用通用式 'a(.*)b(.*)d' 來比對字串 'a--b---b----d' 時,左右邊的括弧會分別比對到 '--b---' 和 '----',而不是'--' 和 '---b----'。若要改變「越左越貪」的原則,可以使用問號來指定最小比對,請見下列範例:
使用小括弧來抽取所要的字串,是一個很有用的功能。我們可以利用此功能來抽取網頁的連結網址和連結文字,這在網頁搜尋引擎的製作上,是一個很重要的步驟,因為「網頁蒐集程式」(又稱為 Web Robot 或 Web Crawler)將網頁抓回來後,就是根據網頁內的連結網址,來決定下次要蒐集的網頁,如此依次(可根據 Depth-first Search 或 Breadth-first Search)反覆蒐集,就可以抓到很多網頁。例如在我們的範例程式中,有一個網頁檔案 regExp.htm,其內容如下:
List of important links:
以網頁瀏覽器開啟此檔案,得到的畫面如下:
利用 regexp 指令所傳回來的第三個輸出變數,我們可以輕易地抓出此網頁的連結網址和連結文字,請見下列範例:
在上述範例中,特別要注意的是,小括弧內部的問號是代表「最小比對」,表示如果有兩種可能的比對情況,那麼我們會選擇讓比對到的字串越短越好,以免發生錯誤。
MATLAB程式設計:進階篇