RegExp說明預設情況下,Regex使用最長(也叫貪婪)匹配原則.當?緊隨其它限定符(*、+、?、{n}、{n,}、{n,m})之後時,匹配模式變成使用最短(也叫非貪婪)匹配原則.
分組組合符就是將Regex中的某一部分內容組合起來的符號,反向引用符則是用於匹配前面的分組組合所捕獲到的內容標識符號
(1) (pattern)將圓括弧中的pattern部分組合成一個可統一操作的組合項和子匹配,每個捕獲
的子匹配項按照它們在Regex模式中從左至右出現的順序儲存在緩衝區中.緩衝區從1開始編號,最多可儲存99個子匹配捕獲的內容.儲存在緩衝區中的子匹配捕獲的內容,可以在程式設計語言中被檢索,也可以在Regex中被反向引用.若要匹配字面意義的括弧字元"("和")",在Regex中要分別使用"\(" 和"\)".
(2) \num匹配編號為num的緩衝區所儲存的內容,此處的num是一個標識特定緩衝區的一位或兩位十進位正整數,這種方式稱為子匹配的反向引用.反向引用最有用的應用之一就是能提供表示相同匹配項的能力,例如,要匹配連續的5個數字字元,可以使用\d{5}作為Regex文本,它可以匹配12345,但是, 要匹配連續的5個相同的數字字元,如55555、11111等,需要使用(\d)\1{4}作為Regex文本,\1表示與前面(\d)所捕獲的內容一樣,\1{4}則表示前面的(\d)所捕獲的內容還連續出現4次.又例如,要匹配"Is is the cost of of gasoline going up up?"中所有連續重複的單詞部分,可以使用/\b([a-z]+)\1\b/gi作為Regex文本.
(3) (?:pattern) 將圓括弧中的pattern部分組合成一個可統一操作的組合項,但不把這部分內容當作子匹配捕獲,即pattern部分是一個非捕獲匹配,它匹配的內容不儲存在緩衝區中供以後使用.這對必須進行組合、但又不想讓組合的部分具有子匹配特點的情況很有用.
(4) (?=pattern)稱為正向"預測先行"匹配,在被搜尋字串的相應位置必須有pattern部分匹配的內容,但這部分匹配的內容不作為匹配結果處理,更不會被儲存在擷取緩衝區中供以後使用.(?=pattern)必須位於一個Regex模式的最前或最後面.
(5) (?!pattern)稱為反向"預測先行"匹配,在被搜尋的字串的相應位置不能有pattern部分匹配的內容,除此之外,功能與正向"預測先行"匹配一樣.