正則表達(dá)式非常有用,查找、匹配、處理字符串、替換和轉(zhuǎn)換字符串,輸入輸出等。而且各種語言都支持,例如.NET正則庫,JDK正則包, Perl, JavaScript等各種腳本語言都支持正則表達(dá)式。下面整理一些常用的正則表達(dá)式。
1. 匹配組
常用的組匹配:(實用)
| 匹配exp并且捕獲到一個自動命名的組 |
| 匹配exp并且捕獲到組’name’ |
(?= exp) | exp出現(xiàn)在聲明右側(cè),但exp不作為匹配括號中的模式必須出現(xiàn)在聲明右側(cè),但不作為匹配的一部分 ,例如:輸入: public keywod string "abc"; 正則:\w+(?=ing),返回“str”,意思為:匹配以ing結(jié)束的單詞,但ing不作為返回 |
(?<= exp) | exp出現(xiàn)在聲明左側(cè),但exp不作為匹配括號中的模式必須出現(xiàn)在聲明左側(cè),但不作為匹配的一部分 ,例如:輸入: public remember string "abc"; 正則:(?<=re)\w+,返回“member”,意思為:匹配以re開頭的單詞,但re不作為返回 |
| exp不出現(xiàn)在聲明右側(cè),但exp不作為匹配括號中的模式必須不出現(xiàn)在聲明右側(cè) ,例如:輸入: remember aqa bqu "abc"; 正則:\w*q(?!u)\w*,返回“aqa”,意思為:匹配帶q后面不是跟隨u的單詞 |
| exp不出現(xiàn)在聲明左側(cè),但exp不作為匹配 |
輸入:public string keywod = "abc"; string value = "test";
目的:匹配 關(guān)鍵字="",例如獲得關(guān)鍵字keyword,value;獲得等于的值abc和test
表達(dá)式:string (?[^=]*?) *= *(?[^;]*?);
代碼:
private void ParseKeywords(string input)
{
System.Text.RegularExpressions.MatchCollection mc =
System.Text.RegularExpressions.Regex.Matches(input, @"string (?[^=]*?) *= *(?[^;]*?);");
if (mc != null && mc.Count > 0)
{
foreach (System.Text.RegularExpressions.Match m in mc)
{
string keyword = m.Groups["x"].Value;
string value = m.Groups["y"].Value;
}
}
}
截圖:
2. 匹配并替換
輸入:public <%=classname%>Extension : IExt
目的:匹配 <%= %>中間的classname并替換
表達(dá)式:<%=.*%>
代碼:
private string Replace(string input)
{
return Regex.Replace(input, @"<%=.*%>", new MatchEvaluator(RefineCodeTag), RegexOptions.Singleline);
}
string RefineCodeTag(Match m)
{
string x = m.ToString();
x = Regex.Replace(x, "<%=", "");
x = Regex.Replace(x, "%>", "");
return x.Trim() + ",";
}
截圖:
正則表達(dá)式選項RegexOptions:
ExplicitCapture | n | 只有定義了命名或編號的組才捕獲 |
IgnoreCase | i | 不區(qū)分大小寫 |
IgnorePatternWhitespace | x | 消除模式中的非轉(zhuǎn)義空白并啟用由 # 標(biāo)記的注釋。 |
MultiLine | m | 多行模式,其原理是修改了^和$的含義 |
SingleLine | s | 單行模式,和MultiLine相對應(yīng) |
正則表達(dá)式替換的其他功能:
$number | 把匹配的第number組替換成替換表達(dá)式 這段代碼返回的是 “01 012 03 05” 就是說,對組一的每個匹配結(jié)果都用"0$1"這個表達(dá)式來替換,"0$1"中"$1"由組1匹配的結(jié)果代入
|
${name} | 把匹配的組名為"name"的組替換成表達(dá)式, 上例的Regex expression改成@"(?\d+)(?#這個是注釋)"后面的替換式改為"0${name}"結(jié)果是一樣的 |
$$ | 做$的轉(zhuǎn)義符,如上例表達(dá)式改成@"(?\d+)(?#這個是注釋)"和"$$${name}",則結(jié)果為"$1 $12 $3 $5" |
$& | 替換整個匹配 |
$` | 替換匹配前的字符 |
$' | 替換匹配后的字符 |
$+ | 替換最后匹配的組 |
$_ | 替換整個字符串 |
3. 匹配URL中文件名
目的:從URL地址中提取文件名
表達(dá)式:s=s.replace(/(.*\/){0,}([^\.]+).*/ig,"$2") ;
代碼:
string s = "http://hgci.cn";
s = s.replace(/(.*\/){0,}([^\.]+).*/ig, "$2") ;
更多建議: