C# 正則表達式判斷IP,URL等及其解釋


C# 正則表達式判斷IP,URL等及其解釋

判斷IP格式方法:

 

[csharp]  view plain  copy
 
  1. public static bool ValidateIPAddress(string ipAddress)  
  2. {  
  3. Regex validipregex=new Regex(@"^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$");  
  4. return (ipAddress!=""&&validipregex.IsMatch(ipAddress.Trim()))?true:false;  
  5. }  

 

 

正則表達式分析:

 

[plain]  view plain  copy
 
  1. ^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$  


 

IP中每個十進制數,“|”號划分了5種情況:①0~9   ②10~99   ③100~199   ④200~249   ⑤250~255

 

{n}表示恰好匹配了n次。  \.){3}表示每個十進制數加'.'重復三次。最后加上最后一個十進制數即完成對IP的匹配。

 

當然這是較簡單的寫法,也可以簡寫成:

 

[plain]  view plain  copy
 
  1. ^(((\d{1,2})|(1\d{2})|(2[0-4]\d)|(25[0-5]))\.){3}((\d{1,2})(1\d{2})|(2[0-4]\d)|(25[0-5]))$  
任意數字重復1-2次,及0~99 ,其他均是對第一個表達式進行了縮寫。C#中務必加上首尾的^和$,否則上述方法匹配-1.1.1.1這樣的IP也會返回True。

 

 

其他常用正則表達式:

URL:

[plain]  view plain  copy
 
  1. ((http|ftp|https)://)(([a-zA-Z0-9\._-]+\.[a-zA-Z]{2,6})|([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}))(:[0-9]{1,4})*(/[a-zA-Z0-9\&%_\./-~-]*)?  

 

關於該正則表達式的說明:

①:該正則表達式匹配的字符串必須以http://、https://、ftp://開頭;

②:該正則表達式能匹配URL或者IP地址;(如:http://www.baidu.com 或者 http://192.168.1.1)

③:該正則表達式能匹配到URL的末尾,即能匹配到子URL;(如能匹配:http://www.baidu.com/s?wd=a&rsv_spt=1&issp=1&rsv_bp=0&ie=utf-8&tn=baiduhome_pg&inputT=1236)

④:該正則表達式能夠匹配端口號;(URL部分轉載自點擊打開鏈接)

 

E-mail:

 

[plain]  view plain  copy
 
  1. (\w+\.) * \w+@(\w+\.)+[A-Za-z]+  

 

\w匹配任何字母或數字  \W匹配除字母和數字外任何字符   \S匹配任何非空字符(除空格,換行,制表符等) 

*表示匹配0或多次   +表示1或多次    .匹配任何除了\n以外的字符    ?匹配0次或1次

 

貪婪模式和懶惰模式

(abc)de(fg)

對於上面的字符串如果使用(.*)匹配,會得到(abc)滿足,(abc)de(fg)同樣滿足,因為正則默認的是貪婪模式,會在得到第一個匹配項后進行回溯,盡量多的匹配滿足條件的項,為了解決這個問題,可以使用(.*?)表達式,在+或*后面加上?,就會在懶惰模式下進行匹配,得到第一個匹配項后不進行回溯,得到盡可能少的匹配項。

 

原文連接:http://blog.csdn.net/sinat_21731599/article/details/46045631


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM