天天看點

C# 正規表達式

正規表達式是個非常重要的工具,最早在Perl等腳本語言中廣泛使用。它文法簡單,但功能強大,可以從大量的字元串當中快速的篩選出自己想要的内容。

下面列舉一些常用的基本的正規表達式,以備查詢使用。

一、基本的正規表達式

1、"^\d+$" //非負整數(正整數 + 0) 

2、"^[0-9]*[1-9][0-9]*$" //正整數 

3、"^((-\d+)|(0+))$" //非正整數(負整數 + 0) 

4、"^-[0-9]*[1-9][0-9]*$" //負整數 

5、"^-?\d+$" //整數 

6、"^\d+(\.\d+)?$" //非負浮點數(正浮點數 + 0) 

7、"^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$" //正浮點數 

8、"^((-\d+(\.\d+)?)|(0+(\.0+)?))$" //非正浮點數(負浮點數 + 0) 

9、"^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$" //負浮點數 

10、"^(-?\d+)(\.\d+)?$" //浮點數 

11、"^[A-Za-z]+$" //由26個英文字母組成的字元串 

12、"^[A-Z]+$" //由26個英文字母的大寫組成的字元串 

13、"^[a-z]+$" //由26個英文字母的小寫組成的字元串 

14、"^[A-Za-z0-9]+$" //由數字和26個英文字母組成的字元串 

15、"^\w+$" //由數字、26個英文字母或者下劃線組成的字元串 

16、"^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$" //email位址 

17、"^[a-zA-z]+://(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\S*)?$" //url 

18、/^(d{2}|d{4})-((0([1-9]{1}))|(1[1|2]))-(([0-2]([1-9]{1}))|(3[0|1]))$/ // 年-月-日 

19、/^((0([1-9]{1}))|(1[1|2]))/(([0-2]([1-9]{1}))|(3[0|1]))/(d{2}|d{4})$/ // 月/日/年 

20、"^([w-.]+)@(([[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.)|(([w-]+.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(]?)$" //Emil 

21、"(d+-)?(d{4}-?d{7}|d{3}-?d{8}|^d{7,8})(-d+)?" //電話号碼 

22、"^(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5])$" //IP位址 

23、YYYY-MM-DD基本上把閏年和2月等的情況都考慮進去了 

^((((1[6-9]|[2-9]\d)\d{2})-(0?[13578]|1[02])-(0?[1-9]|[12]\d|3[01]))|(((1[6-9]|[2-9]\d)\d{2})-(0?[13456789]|1[012])-(0?[1-9]|[12]\d|30))|(((1[6-9]|[2-9]\d)\d{2})-0?2-(0?[1-9]|1\d|2[0-8]))|(((1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))-0?2-29-))$

二、C#中的一些例子:

1、正則分割字元串

1

2

3

<code>string</code> <code>test = </code><code>"XXXX|YYY|ZZZZ"</code><code>;</code>

<code>string</code><code>[] result = Regex.Split(test, </code><code>"[|]"</code><code>);</code><code>//按照|對原字元串進行分割 </code>

<code>result.ToList().ForEach(x =&gt; Console.WriteLine(x));</code><code>//XXXX,YYY,ZZZZ</code>

2、看超連結是否比對  

<code>string</code> <code>str = </code><code>"1.asp?id=100"</code><code>;</code>

<code>Regex regex = </code><code>new</code> <code>Regex(</code><code>@"1.asp\?id\=(\d+)"</code><code>, RegexOptions.IgnoreCase);</code>

<code>Console.WriteLine(regex.IsMatch(str));</code><code>//True</code>

3、篩選内容

<code>Match m = Regex.Match(</code><code>@"&lt;span class='blocking-flag'&gt;緊急&lt;/span&gt;"</code><code>, </code><code>@"(?is)(?&lt;=&lt;span[^&gt;]+&gt;).+?(?=&lt;/span&gt;)"</code><code>);</code>

<code>Console.WriteLine(m.Value);</code><code>//緊急</code>

4、内容替換

<code>string</code> <code>result = Regex.Replace(</code><code>"數位産品(15),MP3(15),日常用品(12),IT産品(12)"</code><code>, </code><code>@"\(\d+\)"</code><code>, </code><code>""</code><code>);</code>

<code>Console.WriteLine(result);</code><code>//數位産品,MP3,日常用品,IT産品</code>

5、去除空格

<code>string</code> <code>result = </code><code>" 我  的  中 國     心 "</code><code>;</code>

<code>result = </code><code>string</code><code>.Join(</code><code>""</code><code>, result.Split(</code><code>new</code> <code>char</code><code>[] { </code><code>' '</code> <code>}, StringSplitOptions.RemoveEmptyEntries));</code><code>//我的中國心</code>

<code>result = Regex.Replace(result, </code><code>@"[\s{1,}]{1,}"</code><code>, </code><code>""</code><code>);</code><code>//我的中國心</code>

6、請求網址獲得連結

4

5

6

7

8

9

10

11

<code>HttpWebRequest request = (HttpWebRequest)WebRequest.Create(</code><code>"xxx"</code><code>);</code><code>//xxx為請求的url</code>

<code>HttpWebResponse response = (HttpWebResponse)request.GetResponse();</code>

<code>Stream stream = response.GetResponseStream();</code>

<code>StreamReader reader = </code><code>new</code> <code>StreamReader(stream, Encoding.Default);</code>

<code>string</code> <code>block = reader.ReadToEnd();</code><code>//擷取傳回的html</code>

<code>MatchCollection matches = Regex.Matches(block,</code><code>@"(?i)&lt;a[^&gt;]*href=([""'])?(?&lt;href&gt;[^'""]+)\1[^&gt;]*&gt;"</code><code>);</code>

<code>foreach</code> <code>(Match match </code><code>in</code> <code>matches)</code>

<code>{</code>

<code>      </code><code>//match; 獲得每個諸如&lt;a href='www.baidu.com'&gt;百度一下&lt;/a&gt;</code>

<code>      </code><code>//match.Groups["href"].Value; 獲得每個諸如www.baidu.com</code>

<code>}</code>

7、将字元串的中文部分替換

<code>Regex.Replace(</code><code>"1354444444張,1434324李,王028-4433434"</code><code>, </code><code>@"[\u4e00-\u9fa5]"</code><code>, </code><code>""</code><code>);</code>

8、身份證格式驗證

<code>public</code> <code>static</code> <code>bool</code> <code>ValidateIdentitycard(</code><code>string</code> <code>identityCard)</code>

<code>    </code><code>return</code> <code>Regex.IsMatch(identityCard, </code><code>@"^(\d{15}$|^\d{18}$|^\d{17}(\d|X|x))$"</code><code>);</code>

最後附一些相關連結:

本文轉自 guwei4037  51CTO部落格,原文連結:http://blog.51cto.com/csharper/1344194

下一篇: C# Linq簡介