使用正規表示式 需要包含名字空間using system.text.regularexpressions;
.net使用的是傳統型nfa引擎,.net正規表示式流派概述
分類舉例
字元縮略表示法
\a [\b] \e \f \n \r \t \v\octal \x## \u#### \cchar
字元組及相關
字元組:[…] [^…]
幾乎任何字元:.(點號)
字元組縮略表示法:\w表達字母 ;\d表示數字;\w表示非字母;\d表示非數字
unicode屬性和區塊:\p
錨點及其它零長度斷言
行/字串其實位置:^ \a
行/字串結束位置:$ \z \z
當前匹配的起始位置:\g
單詞分節符:\b \b
環視結構:(?=…) 順序環視;(?!...)順序否定環視;(?<=…) 逆序環視;(?
注釋及模式修飾符
模式修飾符:(?mods-mods) 容許出現的模式:x s m i n
模式修飾範圍:(?mods-mods:…)
注釋:(?#...)
分組及捕獲
捕獲型括號:(…) \1 \2
對稱分組:(?…)
命令捕獲及回溯:(?…) \k
近分組的括號:(?:…)
固化分組:(?>…)
多選結構:|
匹配優先量詞:*(出現任意次,包括0次);+(至少出現一次);?(至多出現1次,即0次或1次);(必須出現n次);(至少出現n次);(至少出現x次,至多出現y次)
忽略優先量詞:*? +? ?? ? ? ?
條件判斷:(?if then | else) ----if可以是環視、(num)或(name)
.net的匹配模式和正規表示式模式
regexoptions選項
(?mode)
說明.singleline
s點號能夠匹配任何字元,包括換行符
.multiline
m擴充套件^和$的匹配,使之可以匹配內部換行符
.ignorepatternwhitespace
x設定寬鬆排列和注釋模式
ignorecase
i進行不卻分大小寫的匹配
.explicitcapture
n關閉(…)的捕獲功能,只有(?)能夠捕獲
.ecmascript
限制\w、\s和\d只對ascii字元有效
.righttoleft
從字串末尾開始向開頭進行匹配
.compiled
進行編譯,可以提公升匹配速度,但是占用跟多記憶體資源
string value=」scut華工計算機computer大學&%*ghksadf」;
string newvalue = regex.replace(value, "<[^>]*>|]*>", "");
注:上面正規表示式目的是去掉所有等標籤,這在提取網頁內容時候經常用到,並且上面匹配中<[^>]*>表示匹配從《開始並且最近的乙個》,中間可以有任意個字元,|符號表示或,就是去掉」《任意字元》」及」
在輸入字串中搜尋正規表示式的匹配項,並將精確結果作為單個 match 物件返回。
過載列表:
(1) 在指定的輸入字串中搜尋 regex 建構函式中指定的正規表示式匹配項。
[c#] public match match(string);
(2) 從指定的輸入字串起始位置開始在輸入字串中搜尋正規表示式匹配項。
[c#] public match match(string, int);
(3) 在指定的輸入字串中搜尋 pattern 引數中提供的正規表示式的匹配項。
[c#] public static match match(string, string);
(4) 從指定的輸入字串起始位置開始在輸入字串中搜尋具有指定輸入字串長度的正規表示式匹配項。
[c#] public match match(string, int, int);
(5) 在輸入字串中搜尋 pattern 引數中提供的正規表示式的匹配項(匹配選項在 options 引數中提供)。
[c#] public static match match(string, string, regexoptions);
【例一】取出網頁中的title屬性
match titlematch = regex.match(filecontents, "([^<]*)", regexoptions.ignorecase | regexoptions.multiline );
filetitle = titlematch.groups[1].value;
注意紅色的1, regex.match方法得到的groups的索引是從1開始的,而不是從0開始的。
【例二】
string no=」華工計算機\t\t\n學院\t\t\n\n電腦科學與技術\t」;
match matchtmp;
matchtmp = regex.match(no, ".*?",regexoptions.singleline);注:
regexoptions.singleline:指定單行模式。更改點 (.) 的含義,使它與每乙個字元匹配(而不是與除 \n 之外的每個字元匹配)。 這是msdn上面的解釋。在正規表示式中"."是與"\n"之外的所有字元匹配的。當使用singleline的時候,在使用"."的情況下會實現跨行匹配,在使用multiline的時候不會實現跨行匹配;
regexoptions.multiline:多行模式。更改 ^ 和 $ 的含義,使它們分別在任意一行的行首和行尾匹配,而不僅僅在整個字串的開頭和結尾匹配(msdn)。 在正規表示式中,"^"和 "$"表示匹配文字的開頭的結束,但是在multiline的情況下是在任意一行的行首和行尾匹配。
【例三】
結果:在是singleline的情況下,匹配的結果是ne these is the second test line;在不是singleline的情況下,匹配的結果是ne
【例四】
match tmp = regex.match(mt.value, "(src|data-src)=(\")?(.*?)(\"|\\s|$)",
regexoptions.ignorecase);//再次匹配,獲取鏈結
string res = tmp.groups[3].value;
說明:上面的語句中res的值為第三個括號中匹配的結果
正規表示式 正則入門
先從乙個例子開始正規表示式。書寫乙個匹配手機號的正規表示式,為了方便討論,假定手機號是1開頭,第二位只能是3 5 8中的其中乙個,總共11位的數字,形如13 匹配手機號的正規表示式為 1 358 d 下面介紹此正規表示式中的各個符號的含義。表示字串的開頭,後面緊接著1,表示匹配的字串要以 1 開頭。...
正規表示式入門
對於文字字元,有11個字元被保留作特殊用途。他們是 這些特殊字元也被稱作元字元 不可顯示字元 可以使用特殊字串行來代表某些不可顯示字元 代表tab 0x09 代表回車符 0x0d 代表換行符 0x0a 字符集 字符集是由一對方括號 括起來的字元集合。使用字符集,你可以告訴正規表示式引擎僅僅匹配多個字...
正規表示式入門
老師說過 正規表示式就是用字串讀取字串!學習正規表示式的最好方法是從例子開始,理解例子之後再自己對例子進行修改,實驗。下面給出了不少簡單的例子,並對它們作了詳細的說明。假設你在一篇英文 裡查詢hi,你可以使用正規表示式hi。這幾乎是最簡單的正規表示式了,它可以精確匹配這樣的字串 由兩個字元組成,前乙...