成人性生交大片免费看视频r_亚洲综合极品香蕉久久网_在线视频免费观看一区_亚洲精品亚洲人成人网在线播放_国产精品毛片av_久久久久国产精品www_亚洲国产一区二区三区在线播_日韩一区二区三区四区区区_亚洲精品国产无套在线观_国产免费www

主頁 > 知識庫 > C# 正則表達(dá)式 使用介紹

C# 正則表達(dá)式 使用介紹

熱門標(biāo)簽:地圖標(biāo)注與公司業(yè)務(wù)關(guān)系 外呼系統(tǒng)api對接 平?jīng)龈叩碌貓D標(biāo)注商戶要收費嗎 廣西智能外呼系統(tǒng)多少錢 荊州智能電銷機器人 大學(xué)校門地圖標(biāo)注 銷售電銷機器人詐騙 福建微碼電話機器人 提高電話機器人接通率

為了避免以后這樣的情況,在此記錄下正則表達(dá)式的一些基本使用方法附帶小的實例。讓以后在使用時能一目了然知道他的使用,為開發(fā)節(jié)約時間,同時也分享給大家

正則元字符

  在說正則表達(dá)式之前我們先來看看通配符,我想通配符大家都用過。通配符主要有星號(*)和問號(?),用來模糊搜索文件。winodws中我們常會使用搜索來查找一些文件。如:*.jpg,XXX.docx的方式,來快速查找文件。其實正則表達(dá)式和我們通配符很相似也是通過特定的字符匹配我們所要查詢的內(nèi)容信息。已下代碼都是區(qū)分大小寫。

常用元字符

代碼 說明
.                      匹配除換行符以外的任意字符。
\w 匹配字母或數(shù)字或下劃線或漢字。
\s  匹配任意的空白符。
\d 匹配數(shù)字。
\b 匹配單詞的開始或結(jié)束。
[ck] 匹配包含括號內(nèi)元素的字符
^ 匹配行的開始。
匹配行的結(jié)束。
\ 對下一個字符轉(zhuǎn)義。比如$是個特殊的字符。要匹配$的話就得用\$
| 分支條件,如:x|y匹配 x 或 y。

反義元字符

代碼 說明
\W              匹配任意不是字母,數(shù)字,下劃線,漢字的字符。
\S 匹配任意不是空白符的字符。等價于 [^ \f\n\r\t\v]。
\D 匹配任意非數(shù)字的字符。等價于 [^0-9]。
\B 匹配不是單詞開頭或結(jié)束的位置。
[^CK]  匹配除了CK以外的任意字符。

特殊元字符

代碼 說明
\f             匹配一個換頁符。等價于 \x0c 和 \cL。
\n 匹配一個換行符。等價于 \x0a 和 \cJ。
\r 匹配一個回車符。等價于 \x0d 和 \cM。
\t 匹配一個制表符。等價于 \x09 和 \cI。
\v 匹配一個垂直制表符。等價于 \x0b 和 \cK。

限定符

代碼 說明
*                       匹配前面的子表達(dá)式零次或多次。
+ 匹配前面的子表達(dá)式一次或多次。
? 匹配前面的子表達(dá)式零次或一次。
{n} n 是一個非負(fù)整數(shù)。匹配確定的 n 次。
{n,} n 是一個非負(fù)整數(shù)。至少匹配n 次。
{n,m} m 和 n 均為非負(fù)整數(shù),其中n = m。最少匹配 n 次且最多匹配 m 次。

懶惰限定符

代碼 說明
*?                                                 

重復(fù)任意次,但盡可能少重復(fù)。

如 "acbacb"  正則  "a.*?b" 只會取到第一個"acb" 原本可以全部取到但加了限定符后,只會匹配盡可能少的字符 ,而"acbacb"最少字符的結(jié)果就是"acb" 。

+? 重復(fù)1次或更多次,但盡可能少重復(fù)。與上面一樣,只是至少要重復(fù)1次。
??

重復(fù)0次或1次,但盡可能少重復(fù)。

如 "aaacb" 正則 "a.??b" 只會取到最后的三個字符"acb"。

{n,m}?

重復(fù)n到m次,但盡可能少重復(fù)。

如 "aaaaaaaa"  正則 "a{0,m}" 因為最少是0次所以取到結(jié)果為空。

{n,}?

重復(fù)n次以上,但盡可能少重復(fù)。

如 "aaaaaaa"  正則 "a{1,}" 最少是1次所以取到結(jié)果為 "a"。

捕獲分組

代碼 說明
(exp)                                                  匹配exp,并捕獲文本到自動命名的組里。
(?name>exp) 匹配exp,并捕獲文本到名稱為name的組里。
(?:exp) 匹配exp,不捕獲匹配的文本,也不給此分組分配組號以下為零寬斷言。
(?=exp)

匹配exp前面的位置。

如 "How are you doing" 正則"(?txt>.+(?=ing))" 這里取ing前所有的字符,并定義了一個捕獲分組名字為 "txt" 而"txt"這個組里的值為"How are you do";

(?=exp)

匹配exp后面的位置。

如 "How are you doing" 正則"(?txt>(?=How).+)" 這里取"How"之后所有的字符,并定義了一個捕獲分組名字為 "txt" 而"txt"這個組里的值為" are you doing";

(?!exp)

匹配后面跟的不是exp的位置。

如 "123abc" 正則 "\d{3}(?!\d)"匹配3位數(shù)字后非數(shù)字的結(jié)果

(?!exp)

匹配前面不是exp的位置。

如 "abc123 " 正則 "(?![0-9])123" 匹配"123"前面是非數(shù)字的結(jié)果也可寫成"(?!\d)123"

得到上面秘籍后我們可以小試牛刀...

小試牛刀

在C#中使用正則表達(dá)式主要是通過Regex類來實現(xiàn)。命名空間:using System.Text.RegularExpressions。

其中常用方法:

名稱 說明
IsMatch(String, String) 指示 Regex 構(gòu)造函數(shù)中指定的正則表達(dá)式在指定的輸入字符串中是否找到了匹配項。
Match(String, String) 在指定的輸入字符串中搜索 Regex 構(gòu)造函數(shù)中指定的正則表達(dá)式的第一個匹配項。
Matches(String, String) 在指定的輸入字符串中搜索正則表達(dá)式的所有匹配項。
Replace(String, String) 在指定的輸入字符串內(nèi),使用指定的替換字符串替換與某個正則表達(dá)式模式匹配的所有字符串。
Split(String, String) 在由 Regex 構(gòu)造函數(shù)指定的正則表達(dá)式模式所定義的位置,拆分指定的輸入字符串。

在使用正則表達(dá)式前我們先來看看“@”符號的使用。

學(xué)過C#的人都知道C# 中字符串常量可以以@ 開頭聲名,這樣的優(yōu)點是轉(zhuǎn)義序列“不”被處理,按“原樣”輸出,即我們不需要對轉(zhuǎn)義字符加上 \ (反斜扛),就可以輕松coding。如:

復(fù)制代碼 代碼如下:

string filePath = @"c:\Docs\Source\CK.txt" // rather than "c:\\Docs\\Source\\CK.txt"

如要在一個用 @ 引起來的字符串中包括一個雙引號,就需要使用兩對雙引號了。這時候你不能使用 \ 來轉(zhuǎn)義爽引號了,因為在這里 \ 的轉(zhuǎn)義用途已經(jīng)被 @ “屏蔽”掉了。如:

復(fù)制代碼 代碼如下:

string str=@"""Ahoy!"" cried the captain." // 輸出為: "Ahoy!" cried the captain.

字符串匹配:

在實際項目中我們常常需要對用戶輸入的信息進(jìn)行驗證。如:匹配用戶輸入的內(nèi)容是否為數(shù)字,是否為有效的手機號碼,郵箱是否合法....等。

實例代碼:

string RegexStr = string.Empty;
#region 字符串匹配

RegexStr = "^[0-9]+$"; //匹配字符串的開始和結(jié)束是否為0-9的數(shù)字[定位字符]
Console.WriteLine("判斷'R1123'是否為數(shù)字:{0}", Regex.IsMatch("R1123", RegexStr));
Console.WriteLine("判斷'1123'是否為數(shù)字:{0}", Regex.IsMatch("1123", RegexStr));

RegexStr = @"\d+"; //匹配字符串中間是否包含數(shù)字(這里沒有從開始進(jìn)行匹配噢,任意位子只要有一個數(shù)字即可)
Console.WriteLine("'R1123'是否包含數(shù)字:{0}", Regex.IsMatch("R1123", RegexStr));
Console.WriteLine("'博客園'是否包含數(shù)字:{0}", Regex.IsMatch("博客園", RegexStr));

//感謝@zhoumy的提醒..已修改錯誤代碼
RegexStr = @"^Hello World[\w\W]*"; //已Hello World開頭的任意字符(\w\W:組合可匹配任意字符)
Console.WriteLine("'HeLLO WORLD xx hh xx'是否已Hello World開頭:{0}", Regex.IsMatch("HeLLO WORLD xx hh xx", RegexStr, RegexOptions.IgnoreCase));
Console.WriteLine("'LLO WORLD xx hh xx'是否已Hello World開頭:{0}", Regex.IsMatch("LLO WORLD xx hh xx", RegexStr,RegexOptions.IgnoreCase));
//RegexOptions.IgnoreCase:指定不區(qū)分大小寫的匹配。

#endregion

顯示結(jié)果:

字符串查找:

實例代碼:

string RegexStr = string.Empty; 

#region 字符串查找

string LinkA = "a href=\"http://www.baidu.com\" target=\"_blank\">百度/a>";

RegexStr = @"href=""[\S]+"""; // ""匹配"
Match mt = Regex.Match(LinkA, RegexStr);

Console.WriteLine("{0}。", LinkA);
Console.WriteLine("獲得href中的值:{0}。", mt.Value);

RegexStr = @"h[^23456]>[\S]+h[1]>"; //h[^23456]>:匹配h除了2,3,4,5,6之中的值,h[1]>:h匹配包含括號內(nèi)元素的字符
Console.WriteLine("{0}。GetH1值:{1}", "H1>標(biāo)題H1>", Regex.Match("H1>標(biāo)題H1>", RegexStr, RegexOptions.IgnoreCase).Value);
Console.WriteLine("{0}。GetH1值:{1}", "h2>小標(biāo)h2>", Regex.Match("h2>小標(biāo)h2>", RegexStr, RegexOptions.IgnoreCase).Value);
//RegexOptions.IgnoreCase:指定不區(qū)分大小寫的匹配。

RegexStr = @"ab\w+|ij\w{1,}"; //匹配ab和字母 或 ij和字母
Console.WriteLine("{0}。多選結(jié)構(gòu):{1}", "abcd", Regex.Match("abcd", RegexStr).Value);
Console.WriteLine("{0}。多選結(jié)構(gòu):{1}", "efgh", Regex.Match("efgh", RegexStr).Value);
Console.WriteLine("{0}。多選結(jié)構(gòu):{1}", "ijk", Regex.Match("ijk", RegexStr).Value);

RegexStr = @"張三?豐"; //?匹配前面的子表達(dá)式零次或一次。
Console.WriteLine("{0}。可選項元素:{1}", "張三豐", Regex.Match("張三豐", RegexStr).Value);
Console.WriteLine("{0}??蛇x項元素:{1}", "張豐", Regex.Match("張豐", RegexStr).Value);
Console.WriteLine("{0}??蛇x項元素:{1}", "張飛", Regex.Match("張飛", RegexStr).Value);

/* 
 例如:
July|Jul  可縮短為  July?
4th|4   可縮短為  4(th)?
*/

//匹配特殊字符
RegexStr = @"Asp\.net"; //匹配Asp.net字符,因為.是元字符他會匹配除換行符以外的任意字符。這里我們只需要他匹配.字符即可。所以需要轉(zhuǎn)義\.這樣表示匹配.字符
Console.WriteLine("{0}。匹配Asp.net字符:{1}", "Java Asp.net SQLServer", Regex.Match("Java Asp.net SQLServer", RegexStr).Value);
Console.WriteLine("{0}。匹配Asp.net字符:{1}", "C# Java", Regex.Match("C# Java", RegexStr).Value);

#endregion

顯示結(jié)果:

貪婪與懶惰

string f = "fooot";
//貪婪匹配
RegexStr = @"f[o]+";
Match m1 = Regex.Match(f, RegexStr);
Console.WriteLine("{0}貪婪匹配(匹配盡可能多的字符):{1}", f, m1.ToString());

//懶惰匹配
RegexStr = @"f[o]+?";
Match m2 = Regex.Match(f, RegexStr);
Console.WriteLine("{0}懶惰匹配(匹配盡可能少重復(fù)):{1}", f, m2.ToString());

顯示結(jié)果:

從上面的例子中我們不難看出貪婪與懶惰的區(qū)別,他們的名子取的都很形象。

貪婪匹配:匹配盡可能多的字符。

懶惰匹配:匹配盡可能少的字符。

(exp)分組

在做爬蟲時我們經(jīng)常獲得A中一些有用信息。如href,title和顯示內(nèi)容等。

string TaobaoLink = "a href=\"http://www.taobao.com\" title=\"淘寶網(wǎng) - 淘!我喜歡\" target=\"_blank\">淘寶/a>";
RegexStr = @"a[^>]+href=""(\S+)""[^>]+title=""([\s\S]+?)""[^>]+>(\S+)/a>";
Match mat = Regex.Match(TaobaoLink, RegexStr);
for (int i = 0; i  mat.Groups.Count; i++)
{
 Console.WriteLine("第"+i+"組:"+mat.Groups[i].Value);
}

顯示結(jié)果:

在正則表達(dá)式里使用()包含的文本自動會命名為一個組。上面的表達(dá)式中共使用了4個()可以認(rèn)為是分為了4組。

輸出結(jié)果共分為:4組。

0組:為我們所匹配的字符串。

1組:是我們第一個括號[href=""(\S+)""]中(\S+)所匹配的網(wǎng)址信息。內(nèi)容為:http://www.taobao.com。

2組:是第二個括號[title=""([\s\S]+?)""]中所匹配的內(nèi)容信息。內(nèi)容為:淘寶網(wǎng) - 淘!我喜歡。

這里我們會看到+?懶惰限定符。title=""([\s\S]+?)"" 這里+?的下一個字符為"雙引號,"雙引號在匹配字符串后面還有三個。+?懶惰限定符會盡可能少重復(fù),所他會匹配最前面那個"雙引號。如果我們不使用+?懶惰限定符他會匹配到:淘寶網(wǎng) - 淘!我喜歡" target= 會盡可能多重復(fù)匹配。


3組:是第三個括號[(\S+)]所匹配的內(nèi)容信息。內(nèi)容為:淘寶。

說明:反義元字符所對應(yīng)的元字符都能組合匹配任意字符。如:[\w\W],[\s\S],[\d\D]..

(?name>exp) 分組取名

當(dāng)我們匹配分組信息過多后,在某種場合只需取當(dāng)中某幾組信息。這時我們可以對分組取名。通過分組名稱來快速提取對應(yīng)信息。

string Resume = "基本信息姓名:CK|求職意向:.NET軟件工程師|性別:男|學(xué)歷:本專|出生日期:1988-08-08|戶籍:湖北.孝感|E - Mail:9245162@qq.com|手機:15000000000";
RegexStr = @"姓名:(?name>[\S]+)\|\S+性別:(?sex>[\S]{1})\|學(xué)歷:(?xueli>[\S]{1,10})\|出生日期:(?Birth>[\S]{10})\|[\s\S]+手機:(?phone>[\d]{11})";
Match matc = Regex.Match(Resume, RegexStr);
Console.WriteLine("姓名:{0},手機號:{1}", matc.Groups["name"].ToString(), matc.Groups["phone"].ToString());

顯示結(jié)果:

通過(?name>exp)可以很輕易為分組取名。然后通過Groups["name"]取得分組值。

獲得頁面中A標(biāo)簽中href值

string PageInfo = @"hteml>
      div id=""div1"">
       a href=""http://www.baidu.con"" target=""_blank"">百度/a>
       a href=""http://www.taobao.con"" target=""_blank"">淘寶/a>
       a href=""http://www.cnblogs.com"" target=""_blank"">博客園/a>
       a href=""http://www.google.con"" target=""_blank"">google/a>
      /div>
      div id=""div2"">
       a href=""/zufang/"">整租/a>
       a href=""/hezu/"">合租/a>
       a href=""/qiuzu/"">求租/a>
       a href=""/ershoufang/"">二手房/a>
       a href=""/shangpucz/"">商鋪出租/a>
      /div>
     /hteml>";
RegexStr = @"a[^>]+href=""(?href>[\S]+?)""[^>]*>(?text>[\S]+?)/a>";
MatchCollection mc = Regex.Matches(PageInfo, RegexStr);
foreach (Match item in mc)
{
 Console.WriteLine("href:{0}--->text:{1}",item.Groups["href"].ToString(),item.Groups["text"].ToString());
}

顯示結(jié)果:

Replace 替換字符串

用戶在輸入信息時偶爾會包含一些敏感詞,這時我們需要替換這個敏感詞。

string PageInputStr = "靠.TMMD,今天真不爽....";
RegexStr = @"靠|TMMD|媽的";
Regex rep_regex = new Regex(RegexStr);
Console.WriteLine("用戶輸入信息:{0}", PageInputStr);
Console.WriteLine("頁面顯示信息:{0}", rep_regex.Replace(PageInputStr, "***"));

顯示結(jié)果:

對一些敏感詞直接替換成***代替。

Split 拆分字符串

string SplitInputStr = "1xxxxx.2ooooo.3eeee.4kkkkkk.";
RegexStr = @"\d";
Regex spl_regex = new Regex(RegexStr);
string[] str = spl_regex.Split(SplitInputStr);
foreach (string item in str)
{
 Console.WriteLine(item);
}

顯示結(jié)果:

根據(jù)數(shù)字截取字符串。

首先,我們先看幾個實際的例子: 
1.    驗證輸入字符是否
javascript:
var ex = "^\\w+$";
var re = new RegExp(ex,"i");
return re.test(str);

         VBScript

Dim regEx,flag,ex

ex = "^\w+$"

Set regEx = New RegExp

regEx.IgnoreCase = True 

regEx.Global = True 

regEx.Pattern = ex

flag = regEx.Test( str )

              C#

System.String ex = @"^\w+$";

              System.Text.RegularExpressions.Regex reg = new Regex( ex );                           
              bool flag = reg.IsMatch( str );

2.    驗證郵件格式

C#

System.String ex = @"^\w+@\w+\.\w+$";

System.Text.RegularExpressions.Regex reg = new Regex( ex );

bool flag = reg.IsMatch( str );

3.    更改日期的格式(用 dd-mm-yy 的日期形式代替 mm/dd/yy 的日期形式)

C#

String MDYToDMY(String input) 

   {

      return Regex.Replace(input, 

         "\\b(?\\d{1,2})/(?\\d{1,2})/(?\\d{2,4})\\b",

         "${day}-${month}-${year}");

   }

4.    從 URL 提取協(xié)議和端口號

C#

String Extension(String url) 

   {

      Regex r = new Regex(@"^(?\w+)://[^/]+?(?:\d+)?/",

         RegexOptions.Compiled);

      return r.Match(url).Result("${proto}${port}"); 

   }

這里的例子可能是我們在網(wǎng)頁開發(fā)中,通常會碰到的一些正則表達(dá)式,尤其在第一個例子中,給出了使用javascript,vbScript,C#等不同語言的實現(xiàn)方式,大家不難看出,對于不同的語言來說,正則表達(dá)式?jīng)]有區(qū)別,只是正則表達(dá)式的實現(xiàn)類不同而已。而如何發(fā)揮正則表達(dá)式的公用,也要看實現(xiàn)類的支持。

(摘自msdn: Microsoft .NET 框架 SDK 提供大量的正則表達(dá)式工具,使您能夠高效地創(chuàng)建、比較和修改字符串,以及迅速地分析大量文本和數(shù)據(jù)以搜索、移除和替換文本模式。ms-help://MS.VSCC/MS.MSDNVS.2052/cpgenref/html/cpconregularexpressionslanguageelements.htm)

下面我們逐個來分析這些例子:

1-2,這兩個例子很簡單,只是簡單的驗證字符串是否符合正則表達(dá)式規(guī)定的格式,其中使用的語法,在第一篇文章中都已經(jīng)介紹過了,這里做一下簡單的描述。

第1個例子的表達(dá)式:  ^\w+$

^ -- 表示限定匹配開始于字符串的開始

         \w – 表示匹配英文字符

         + -- 表示匹配字符出現(xiàn)1次或多次

         $ -- 表示匹配字符到字符串結(jié)尾處結(jié)束

         驗證形如asgasdfs的字符串

第2個例子的表達(dá)式:  ^\w+@\w+.\w+$

^ -- 表示限定匹配開始于字符串的開始

\w – 表示匹配英文字符

+ -- 表示匹配字符出現(xiàn)1次或多次

@ -- 匹配普通字符@

\. – 匹配普通字符.(注意.為特殊字符,因此要加上\轉(zhuǎn)譯)

$ -- 表示匹配字符到字符串結(jié)尾處結(jié)束

驗證形如dragontt@sina.com的郵件格式

 

 

     第3 個例子中,使用了替換,因此,我們還是先來看看正則表達(dá)式中替換的定義:

(ms-help://MS.VSCC/MS.MSDNVS.2052/cpgenref/html/cpconsubstitutions.htm)

替換
字符
 含義
 
$123
 替換由組號 123(十進(jìn)制)匹配的最后一個子字符串。
 
${name}
 替換由 (? ) 組匹配的最后一個子字符串。
 
$$
 替換單個“$”字符。
 
$
 替換完全匹配本身的一個副本。
 
$`
 替換匹配前的輸入字符串的所有文本。
 
$'
 替換匹配后的輸入字符串的所有文本。
 
$+
 替換最后捕獲的組。
 
$_
 替換整個輸入字符串。
 


分組構(gòu)造
(ms-help://MS.VSCC/MS.MSDNVS.2052/cpgenref/html/cpcongroupingconstructs.htm)

分組構(gòu)造
 定義
 
( )
 捕獲匹配的子字符串(或非捕獲組;有關(guān)更多信息,請參閱正則表達(dá)式選項中的 ExplicitCapture 選項。)使用 () 的捕獲根據(jù)左括號的順序從 1 開始自動編號。捕獲元素編號為零的第一個捕獲是由整個正則表達(dá)式模式匹配的文本。
 
(?name> )
 將匹配的子字符串捕獲到一個組名稱或編號名稱中。用于 name 的字符串不能包含任何標(biāo)點符號,并且不能以數(shù)字開頭。可以使用單引號替代尖括號,例如 (?'name')。
 
(?name1-name2> )
 平衡組定義。刪除先前定義的 name2 組的定義并在 name1 組中存儲先前定義的 name2 組和當(dāng)前組之間的間隔。如果未定義 name2 組,則匹配將回溯。由于刪除 name2 的最后一個定義會顯示 name2 的先前定義,因此該構(gòu)造允許將 name2 組的捕獲堆棧用作計數(shù)器以跟蹤嵌套構(gòu)造(如括號)。在此構(gòu)造中,name1 是可選的??梢允褂脝我柼娲饫ㄌ枺?nbsp;(?'name1-name2')。
 
(?: )
 非捕獲組。
 
(?imnsx-imnsx: )
 應(yīng)用或禁用子表達(dá)式中指定的選項。例如,(?i-s: ) 將打開不區(qū)分大小寫并禁用單行模式。有關(guān)更多信息,請參閱正則表達(dá)式選項。
 
(?= )
 零寬度正預(yù)測先行斷言。僅當(dāng)子表達(dá)式在此位置的右側(cè)匹配時才繼續(xù)匹配。例如,\w+(?=\d) 與后跟數(shù)字的單詞匹配,而不與該數(shù)字匹配。此構(gòu)造不會回溯。
 
(?! )
 零寬度負(fù)預(yù)測先行斷言。僅當(dāng)子表達(dá)式不在此位置的右側(cè)匹配時才繼續(xù)匹配。例如,\b(?!un)\w+\b 與不以 un 開頭的單詞匹配。
 
(?= )
 零寬度正回顧后發(fā)斷言。僅當(dāng)子表達(dá)式在此位置的左側(cè)匹配時才繼續(xù)匹配。例如,(?=19)99 與跟在 19 后面的 99 的實例匹配。此構(gòu)造不會回溯。
 
(?
 零寬度負(fù)回顧后發(fā)斷言。僅當(dāng)子表達(dá)式不在此位置的左側(cè)匹配時才繼續(xù)匹配。
 
(?> )
 非回溯子表達(dá)式(也稱為貪婪子表達(dá)式)。該子表達(dá)式僅完全匹配一次,然后就不會逐段參與回溯了。(也就是說,該子表達(dá)式僅與可由該子表達(dá)式單獨匹配的字符串匹配。)
 


 

我們還是先簡單的了解一下這兩個概念:

分組構(gòu)造:

最基本的構(gòu)造方式就是(),在左右括號中括起來的部分,就是一個分組;

更進(jìn)一步的分組就是形如:(?name> )的分組方式,這種方式與第一種方式的不同點,就是對分組的部分進(jìn)行了命名,這樣就可以通過該組的命名來獲取信息;

(還有形如(?= )等等的分組構(gòu)造,我們這篇的例子中也沒有使用到,下次我們在來介紹)

替換:

       上面提到了兩種基本的構(gòu)造分組方式()以及(?name> ),通過這兩種分組方式,我們可以得到形如$1,${name}的匹配結(jié)果。

 

       這樣說,可能概念上還是有些模糊,我們還是結(jié)合上面的例子來說:

第三個例子的正則表達(dá)式為:\\b(?\\d{1,2})/(?\\d{1,2})/(?\\d{2,4})\\b

(解釋一下,為什么這里都是\\一起用:這里是C#的例子,在C#語言中\(zhòng)是轉(zhuǎn)譯字符,要想字符串中的\不轉(zhuǎn)譯,就需要使用\\或者在整個字符串的開始加上@標(biāo)記,即上面等價與

@”\b(?\d{1,2})/(?\d{1,2})/(?\d{2,4}\b”)

\b --  是一種特殊情況。在正則表達(dá)式中,除了在 [] 字符類中表示退格符以外,\b 表示字邊界(在 \w 和 \W 字符之間)。在替換模式中,\b 始終表示退格符

(?\d{1,2}) – 構(gòu)造一個名為month的分組,這個分組匹配一個長度為1-2的數(shù)字

/ -- 匹配普通的/字符

(?\d{1,2}) --構(gòu)造一個名為day的分組,這個分組匹配一個長度為1-2的數(shù)字

/ -- 匹配普通的/字符

(?\d{2,4}\b”) --構(gòu)造一個名為year的分組,這個分組匹配一個長度為2-4的數(shù)字

 

這里還不能夠看出這些分組的作用,我們接著看這一句

${day}-${month}-${year}

${day} – 獲得上面構(gòu)造的名為day的分組匹配后的信息

- -- 普通的-字符

${month} --獲得上面構(gòu)造的名為month的分組匹配后的信息

- -- 普通的-字符

${year} --獲得上面構(gòu)造的名為year的分組匹配后的信息

 

舉例來說:

將形如04/02/2003的日期使用例3種的方法替換

(?\d{1,2}) 分組將匹配到04由${month}得到這個匹配值

(?\d{1,2}) 分組將匹配到02由${day}得到這個匹配值

(?\d{1,2}) 分組將匹配到2003由${year}得到這個匹配值

了解了這個例子后,我們在來看第4個例子就很簡單了。

 

第4個例子的正則

^(?\w+)://[^/]+?(?:\d+)?/

^ -- 表示限定匹配開始于字符串的開始

(?\w+) – 構(gòu)造一個名為proto的分組,匹配一個或多個字母

: -- 普通的:字符

// -- 匹配兩個/字符

[^/] – 表示這里不允許是/字符

+? – 表示指定盡可能少地使用重復(fù)但至少使用一次匹配

(?:\d+) – 構(gòu)造一個名為port的分組,匹配形如:2134(冒號+一個或多個數(shù)字)

? – 表示匹配字符出現(xiàn)0次或1次

/ -- 匹配/字符

 

最后通過${proto}${port}來獲取兩個分組構(gòu)造的匹配內(nèi)容

(有關(guān)Regex對象的用法,參考

ms-help://MS.VSCC/MS.MSDNVS.2052/cpref/html/frlrfSystemTextRegularExpressionsRegexMembersTopic.htm)

您可能感興趣的文章:
  • 使用C#9中records作為強類型ID的實例教程
  • C# 9 中新加入的關(guān)鍵詞 init,record,with
  • C# 如何實現(xiàn)一個基于值相等性比較的字典
  • C#中List〈string〉和string[]數(shù)組之間的相互轉(zhuǎn)換
  • C# 一個WCF簡單實例
  • C#連接MySql數(shù)據(jù)庫的方法
  • c#的dllimport使用方法詳解
  • c#實現(xiàn)16進(jìn)制和字符串之間轉(zhuǎn)換的代碼
  • c#使用多線程的幾種方式示例詳解
  • c# record的使用場景

標(biāo)簽:婁底 衡陽 海南 邯鄲 樂山 黔東 內(nèi)江 德陽

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《C# 正則表達(dá)式 使用介紹》,本文關(guān)鍵詞  正則,表達(dá)式,使用,介紹,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《C# 正則表達(dá)式 使用介紹》相關(guān)的同類信息!
  • 本頁收集關(guān)于C# 正則表達(dá)式 使用介紹的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    新狼窝色av性久久久久久| 日韩极品少妇| 精品国产鲁一鲁一区二区三区| 日本黄色a视频| 成人羞羞国产免费| 国产精品一色哟哟哟| 日韩免费在线| 欧美在线黄色| 91国产视频在线| 国产一区二区三区不卡免费观看| 折磨小男生性器羞耻的故事| 国产一区二区三区高清视频| 久久久久成人网站| 国产成人在线电影| 天堂网avav| 91亚洲一区精品| 亚洲精选视频免费看| 久久久久久网址| 首页国产精品| 亚洲一区欧美激情| 人妻互换免费中文字幕| 日韩大片免费在线观看| 精品欧美国产一区二区三区不卡| 天堂精品高清1区2区3区| 亚洲黄色成人| 毛片基地网站| 在线观看日本www| 国产免费无码一区二区视频| 日韩欧美久久一区| 日韩一区二区三区免费播放| 日本xxxxxxx免费视频| 午夜精品视频一区| 国产综合色一区二区三区| 国产精品人人妻人人爽人人牛| 囯产精品一品二区三区| 性欧美丰满熟妇xxxx性久久久| 这里只有精品在线播放| 人人做人人爽人人爱| 国产美女视频一区二区三区| bt天堂新版中文在线地址| 99久久精品无码一区二区毛片| 成人软件在线观看| 久久成人av少妇免费| 天天操天天插天天射| 妺妺窝人体色777777| 大尺度在线观看| 日本三级日本三级日本三级极| 成人羞羞视频播放网站| 福利视频第一区| 91精品国产一区二区三区动漫| 成人短视频在线看| 毛片毛片毛片毛片毛片毛片| 亚洲福利视频免费观看| 青青青免费在线视频| 久久久人人人| 成人18视频在线观看| 可以免费观看av的网站| 国产视频一区二区| 久久综合九色综合欧美就去吻| 免费男女羞羞的视频网站中文字幕妖精视频| 亚洲网站在线看| 亚洲国产欧美日韩另类综合| 日韩欧美黄色动漫| 国产精品第六页| 欧美裸身视频免费观看| 18久久久久久| 久久久久久久久久久久久久av| 亚洲特级毛片| 日韩资源在线| 欧美日韩精品欧美日韩精品一综合| 中文字幕av免费观看| 欧美精品一区二区三区一线天视频| 精品欧美一区二区三区精品久久| 韩国av一区二区三区四区| 欧美成人高潮一二区在线看| 国模私拍国内精品国内av| 成人亚洲国产| 99精品欧美一区| 99久久国产宗和精品1上映| 中文字幕在线看精品乱码| www.在线欧美| 中文字幕视频网站| 日韩熟女一区二区| 人妻无码一区二区三区四区| 欧美日本一区| 玖玖视频精品| 国产精品一区二区女厕厕| 在线综合视频| 国产激情在线观看视频| 久久免费视频66| 国语精品视频| 热久久99这里有精品| 亚洲精品888| 国产一区二区看久久| 久久精品国内一区二区三区水蜜桃| 亚洲人人夜夜澡人人爽| 不卡视频观看| 蜜桃视频成人| 美腿丝袜在线亚洲一区| 天天草天天干| 国产乱码精品一区二区三区不卡| 婷婷综合激情| 性欧美18一19性猛交| 老司机成人免费视频| 成人性生交大片免费观看网站| 日本老妇乱子| 中国xxx69视频| 欧美一区二区三区免费在线看| 灌醉mj刚成年的大学平面模特| 久久精品国产免费看久久精品| 亚洲国产精品久久久久婷婷老年| 国产一级视频在线| 亚洲欧美一区二区三区| 在线亚洲一区二区| 国产一区二区不卡老阿姨| 日韩精品在线免费| 亚洲人视频在线观看| 免费观看国产视频| aa日韩免费精品视频一| 奇米777影视成人四色| 91精品国产高清自在线看超| 欧美视频精品| 久久久久99人妻一区二区三区| 久久久久久久久久美女| 中文在线免费看视频| 日本亚洲欧美| 国产精品麻豆一区二区| 天堂v在线视频| 天堂视频中文在线| 欧美日韩一区二区三区不卡视频| 欧美理论电影在线精品| 六月丁香婷婷在线| 99亚洲精品视频| 成人在线播放网址| 日韩精品专区在线影院观看| 国产精品国产三级国产试看| 综合一区二区三区| 极品魔鬼身材女神啪啪精品| 日日躁夜夜躁aaaabbbb| 视频国产一区| 91精品国产麻豆国产在线观看| 亚洲视频自拍| 8x福利精品第一导航| 国产精品久久久久久在线观看| 小鲜肉gaygays免费动漫| 日本欧美韩国| 精品91久久| 九九视频精品免费| 中文字幕无码精品亚洲35| 日韩精品一区二区视频| 亚洲乱码中文字幕久久孕妇黑人| 国产在视频一区二区三区吞精| 三年中文高清在线观看第6集| 深夜成人影院| 91av中文字幕| 国产成人精品一区二区无码呦| 性色av香蕉一区二区| 高清av电影| 人妻 日韩精品 中文字幕| 欧美极品美女电影一区| 国产无遮挡免费视频| 国产va在线播放| 欧美中文日韩| 一区二区三区在线免费播放| 视色,视色影院,视色影库,视色网| 福利在线一区| 成人黄色小视频| 国产人伦精品一区二区| 精品国产亚洲av麻豆| 成人毛片在线精品国产| 久久综合精品视频| 久久久国产精品人人片| 奇米777影视成人四色| 黄色网址多少| 国产精品久久久久影院亚瑟| 日韩欧美一二区| 国产精品久久久久久久精| 亚洲精品久久在线| 久久精品国产亚洲高清剧情介绍| 久久丁香综合五月国产三级网站| 在线观看免费高清视频97| 99re这里只有精品6| 国产精品久久久久久成人| 亚洲综合一二三| 开心激情五月网| 久久久噜噜噜久久| 国产视频一区二区三区在线播放| 午夜精品久久久久99蜜桃最新版| 免费观看成人毛片| www.神马久久| 欧美三级乱人伦电影| 中文字幕日韩在线观看| www.超碰在线| 亚洲成a人片77777精品| 中文字幕无码人妻少妇免费| 日韩二区在线观看| 久久三级视频| 国产午夜精品无码一区二区| 免费在线高清av| 国产1区2区3区4区| 另类人妖一区二区av| 人妻av无码一区二区三区| 欧美日韩一区精品| 全免费一级毛片免费看| 深夜福利视频在线免费观看| 国产精品一区=区| gogogo高清在线观看一区二区| 免费成人黄色| 色屁屁影院www国产高清麻豆| 亚洲综合中文字幕在线| 国产精品一国产精品最新章节| 99riav视频一区二区| 日本不卡视频在线观看| 国产在线免费av| av电影在线观看完整版一区二区| 在线人成动漫视频在线观看| 天堂中文在线资| 国产又粗又长又大的视频| 深爱激情久久| 欧美电影免费提供在线观看| 性欧美丰满熟妇xxxx性仙踪林| 日本在线免费播放| 欧美国产日本高清在线| 精品国产免费人成在线观看| 成人手机在线电影| 中文字幕精品一区二| 日韩视频一区| av毛片午夜不卡高**水| www黄视频| 丰满少妇高潮一区二区| 一本到高清视频免费精品| 这里只有视频精品| 国产精品视频在线观看| 欧美人妻精品一区二区三区| 日韩精品一区二区三区中文不卡| 欧美片在线播放| 成人一级片网址| 精品亚洲aⅴ乱码一区二区三区| 亚洲精品午夜精品| 日韩在线观看免费全| 国产福利免费在线观看| 污视频在线观看免费| 欧美一级淫片007| 久久精品成人一区二区三区蜜臀| 免费在线播放av| 青椒成人免费视频| 999在线观看| 可以在线看的av网站| 欧美综合一区第一页| 欧美一区电影| 成熟了的熟妇毛茸茸| 婷婷成人激情在线网| 国产精品亚洲一区二区在线观看| 亚洲激情影院| 99久在线精品99re8热| 国产一区二区三区视频在线| 男人的天堂久久精品| 最新中文字幕在线播放| 三级黄色在线视频| 欧美日韩一区三区| 色在线中文字幕| 爱情岛论坛亚洲品质自拍视频网站| 国产精品男女猛烈高潮激情| 精品在线亚洲视频| 久久亚洲无码视频| 国产精品免费在线播放| 九九精品久久| 999国产精品| 2021av天天| 青青草娱乐视频| 黄色在线视频网| 飘雪影院手机免费高清版在线观看| 亚洲一区二三| 午夜成人免费视频| 国产不卡视频| 97超级碰碰碰久久久| 寂寞护士中文字幕mp4| 国产免费久久精品| 樱花草www在线| 亚洲人成午夜免电影费观看| 丝袜美腿亚洲一区二区图片| 中文字幕一区二区三区日韩精品| 欧美亚洲日本精品| 亚洲精品久久久狠狠狠爱| 99成人国产精品视频| 欧美日韩一区二区不卡| 国产伦精品一区二区三区免.费| 色www免费视频| 神马久久影院| 国产在线a不卡| 色综合视频一区二区三区44| www.99久久热国产日韩欧美.com| eeuss鲁片一区| av在线首页| 潮喷失禁大喷水aⅴ无码| 午夜精品一区二| 91精品国产手机| 国产欧美一区二区三区国产幕精品| 国产精品女人久久久| 日韩精品一区二区三区四区视频| 轻点好疼好大好爽视频| 激情图片中文字幕| 国产伦精品一区二区三区视频| 国产精品免费看一区二区三区| 亚洲一二av| 欧美午夜性囗交xxxx| 久久99精品国产.久久久久| 久久久久久久久久久99999| 男女午夜刺激视频| 一级片手机在线观看| 日韩亚洲一区二区| 日韩av毛片网| 成人免费在线视频网址| 久久99精品久久久久久噜噜| 91精品久久久久久久91蜜桃| 国产91色在线|免| 日本不卡网站| 国产精品久久久久久久美男| 欧美精品精品一区| 欧美黑人ⅹxxx另类猛交| 久久久久亚洲av成人毛片韩| 男人天堂网视频| 成人在线视频你懂的| 日本精品在线中文字幕| 日韩亚洲综合在线| av中文字幕在线免费观看| 国产这里有精品| 国产69精品久久久久9999小说|