匹配IP字串 網域名稱的正規表示式

2021-04-13 05:20:49 字數 1142 閱讀 6185

讀了幾頁《mastering regular expression》,有心想寫乙個能夠匹配ip字串的正規表示式,實際嘗試發現遠沒有自己寫幾行**來判斷來得容易,呵呵。

乙個ip字串,由四段組成,每一段是0~255的數字,段與段之間用小數點隔開,比如61.139.2.69就是乙個合法的ip字串。

如果正規表示式寫成/d(/./d)無疑是不負責的,因為它可以匹配300.400.555.666這樣的非法ip字串。

要匹配乙個0~255之間的數,有幾種匹配方式,下面是其中一種:

匹配正規表示式

說明0~9

/d單個數字

10~99

[1-9]/d

兩位數100~199

1/d/d

百位為1的三位數

200~249

2[0-4]/d

三位數,百位是2,十位是0~9

250~255

25[0-5]

三位數,百位是2,十位是5,個位是0~5

寫成正規表示式,即:(/d|([1-9]/d)|(1/d/d)|(2[0-4]/d)|(25[0-5])),但是這樣的正規表示式在匹配254這樣的字串時,會分別匹配2、5、4,得到3個匹配,達不到預期效果,正確做法是將次序顛倒為((25[0-5])|(2[0-4]/d)|(1/d/d)|([1-9]/d)|/d),因為在(***|yyy)這種匹配行為中,是從左向右搜尋的。

完整的正規表示式是:

((25[0-5])|(2[0-4]/d)|(1/d/d)|([1-9]/d)|/d)(/.((25[0-5])|(2[0-4]/d)|(1/d/d)|([1-9]/d)|/d)) 按:

乙個完整的網域名稱,由根域、頂級域、二級、**……網域名稱構成,每級網域名稱之間用點分開,每級網域名稱由字母、數字和減號構成(第乙個字母不能是減號),不區分大小寫,長度不超過63。

很顯然,單獨的名字可以由正規表示式[a-za-z0-9][-a-za-z0-9]來匹配,而完整的網域名稱至少包括兩個名字(比如google.com,由google和com構成),最後可以有乙個表示根域的點(在規範中,最後有乙個點的才是完整網域名稱,但一般認為包括兩個以上名字的網域名稱也是完整網域名稱,哪怕它後面沒有點)。

匹配完整網域名稱的正規表示式:

[a-za-z0-9][-a-za-z0-9](/.[a-za-z0-9][-a-za-z0-9])+/.?

正規表示式 匹配IP 網域名稱

ip是由四段組成,每一段是0 255的數字,段與段之間用小數點隔開,比如192.168.1.1就是合法的ip位址。如果正規表示式寫成d d 無疑是不負責的,因為它可以匹配300.400.555.666這樣的非法ip字串。如果要匹配乙個0 255之間的數,有幾種匹配方式,下面是其中一種 匹配正規表示式...

正規表示式匹配字串

正規表示式用於字串處理 表單驗證等場合,實用高效。現將一些常用的表示式收集於此,以備不時之需。匹配中文字元的正規表示式 u4e00 u9fa5 評注 匹配中文還真是個頭疼的事,有了這個表示式就好辦了 匹配雙位元組字元 包括漢字在內 x00 xff 評注 可以用來計算字串的長度 乙個雙位元組字元長度計...

正規表示式匹配 字串

正規表示式匹配字串 假使,有幾個需要驗證的字串用 連線在一起 形如 farmer1,1farmer234 想用正規表示式來匹配每乙個字串。private static string sourcestr farmer1,1farmer234 private static string key farm...