捕獲組
語法:
字元
描述
示例
(pattern)
匹配pattern並捕獲結果,自動設定組號。
(abc)+d
匹配abcd或者abcabcd
(?pattern)
或(?'name'pattern)
匹配pattern並捕獲結果,設定name為組名。
\num
對捕獲組的反向引用。其中 num 是乙個正整數。
(\w)(\w)\2\1
匹配abba
\k< name >
或\k' name '
對命名捕獲組的反向引用。其中 name 是捕獲組名。
(?\w)abc\k
匹配xabcx
使用小括號指定乙個子表示式後,匹配這個子表示式的文字(也就是此分組捕獲的內容)可以在表示式或其它程式中作進一步的處理。預設情況下,每個捕獲組會自動擁有乙個組號,規則是:從左向右,以分組的左括號為標誌,第乙個出現的分組的組號為1,第二個為2,以此類推。
例如:
(\d)-(\d-(\d))
1 1 2 3 32
以下是用程式處理捕獲組的示例,對乙個url位址進行解析,並顯示所有捕獲組。
可以看到按順序設定的捕獲組號。
regex.match方法
複製** **如下:
using system.text.regularexpressions;
namespace wuhong.test
: ", i, m.groups[i]));程式設計客棧
} }
console.readline();
} } }
也可以自己指定子表示式的組名。這樣在表示式或程式中可以直接引用組名,當然也可以繼續使用組號。但如果正規表示式中同時存在普通捕獲組和命名捕獲組,那麼捕獲組的編號就要特別注意,編號的規則是先對普通捕獲組進行編號,再對命名捕獲組進行編號。
例如:
(\d)-(?\d-(\d))
1 1 3 2 23
下面在程式中處理命名捕獲組,顯示混合規則生成的組號,並利用捕獲組的內容對源字串進行替換。
可以看到先對普通捕獲組進行編號,再對命名捕獲組編號。
regex.replace方法
複製** **如下:
using system.text.regularexpressions;
namespace wuhong.test
: ", i, m.groups[i]));
} }
//替換字串
//「$組號」引用捕獲組的內容。
//需要特別注意的是「$組號」後不能跟數字形式的字串,如果出現此情況,需要使用命名捕獲組,引用格式「$」
string replacement = string.format("$1://$2", "new-reg-test-server", "");
string result = regurl.replace(source, replacement);
console.writeline(result);
console.readline();
} }
} 非捕獲組
語法:字元
描述
示例
(?:pattern)
匹配pattern,但不捕獲匹配結果。
'industr(?:y|ies)
匹配'industry'或'industries'。
(?=pattern)
零寬度正向預查,不捕獲匹配結果。
'windows (?=95|98|nt|2000)'
匹配 "windows2000" 中的 "windows"
不匹配 "windows3.1" 中的 "windows"。
(?!pattern)
零寬度負向預查,不捕獲匹配結果。
'windows (?!95|98|nt|2000)'
匹配 "windows3.1" 中的 "windows"
不匹配 "windows2000" 中的 "windows"。
(?<=pattern)
零寬度正向回查,不捕獲匹配結果。
'2000 (?<=office|word|excel)'
匹配 " office2000" 中的 "2000"
不匹配 "windows2000" 中的 "2000"。
(?pattern)
零寬度負向回查,不捕獲匹配結果。
'2000 (?
匹配 " windows2000" 中的 "2000"
不匹配 " office2000" 中的 "2000"。
非捕獲組只匹配結果,但不捕獲結果,也不會分配組號,當然也不能在表示式和程式中做進一步處理。
首先(?:pattern)與(pattern)不同之處只是在於不捕獲結果。
接下來的四個非捕獲組用於匹配pattern(或者不匹配pattern)位置之前(或之後)的內容。匹配的結果不包括pattern。
例如:
(?<=).*(?=)匹配不包含屬性的簡單html標籤內的內容。如:hello
之中的hello,匹配結果不包括字首和字尾
。 下面是程式中非捕獲組的示例,用來提取郵編。
可以看到反向回查和反向預查都沒有**獲。
regex.matches方法
複製** **如下:
using system.text.regularexpressions;
namespace wuhong.test
: 程式設計客棧 : ", j, i, mlist[j].groups[i]));
} }
console.readline();
} } }
注釋 語法:
字元
描述
示例
(?#comment)
comment是注釋,不對正規表示式的處理產生任何影響
2[0-4]\d(?#200-249)|25[0-5](?#250-255)|1?\d\d?(?#0-199)
匹配0-255的整數
這個不解釋了。
本文標題: 正規表示式之捕獲組/非捕獲組介紹
本文位址: /wangluo/re/83477.html
正規表示式之捕獲組 非捕獲組
語法 字元 描述 示例 pattern 匹配pattern並捕獲結果,自動設定組號。abc d 匹配abcd或者abcabcd pattern 或 name pattern 匹配pattern並捕獲結果,設定name為組名。num 對捕獲組的反向引用。其中 num 是乙個正整數。w w 2 1 匹配...
PHP之正規表示式捕獲組與非捕獲組(詳解)
在專案開發過程中正則表示經常會用到,可以說會正規表示式是每個程式設計師最基本的要求,初學者在剛接觸正規表示式都感到很吃力。最近看到一位朋友的部落格寫的 php正規表示式 獲益頗多,在章節對萬用字元以及捕獲資料非常感興趣。這兩章節剛好也涉及到了正規表示式的捕獲組和非捕獲組的內容,以此來分析這方面的內容...
mysql 正則匹配 捕獲組 正規表示式 捕獲組
大綱 語法實戰 反向引用 替換 一 語法 捕獲組 匹配子表示式內容,匹配結果以編號或顯示命名的方式存在記憶體,可供正則本身,也可供替換使用。語法 數字編號 pattern 匹配結果儲存為數字。顯示命名 pattern 匹配結果儲存到變數name中。非捕獲 pattern 標識不需要儲存的組。二 實戰...