go 正規表示式分組匹配 golang 正規表示式

2021-10-17 06:29:23 字數 1589 閱讀 4805

做乙個微服務,需要對http頭域裡的remoteip做訪問限制:所有區域網都要鑑權,其中一些特殊ip,如閘道器位址,直接拒絕,防止公網訪問。正規表示式很好的解決了這個,直接貼**,讀者拿來直接改改就能用了。

核心正則:

10.*.*.*

10\.(25[0-5]|2[0-4][0-9]|[0-1]?[0-9]?[0-9])\.(25[0-5]|2[0-4][0-9]|[0-1]?[0-9]?[0-9])\.(25[0-5]|2[0-4][0-9]|[0-1]?[0-9]?[0-9])

172.16.*.* - 172.31.*.*

172\.((1[6-9])|(2[0-9])|(3[0-1]))\.(25[0-5]|2[0-4][0-9]|[0-1]?[0-9]?[0-9])\.(25[0-5]|2[0-4][0-9]|[0-1]?[0-9]?[0-9])

192.168.*.*

192\.168\.(25[0-5]|2[0-4][0-9]|[0-1]?[0-9]?[0-9])\.(25[0-5]|2[0-4][0-9]|[0-1]?[0-9]?[0-9])

golang的**也很簡單了,如下:

func ipaddracl(ip string) (retstr string){

//本地環迴位址屬於白名單,允許訪問

if match0,_ := regexp.matchstring(`127\.0\.0\.1`,ip); match0 {

retstr = "white"

return

if match2,_ := regexp.matchstring(`10\.(25[0-5]|2[0-4][0-9]|[0-1]?[0-9]?[0-9])\.(25[0-5]|2[0-4][0-9]|[0-1]?[0-9]?[0-9])\.(25[0-5]|2[0-4][0-9]|[0-1]?[0-9]?[0-9])`,ip); match2 {

if match3,_ := regexp.matchstring(`10\.10\.30\.1`,ip); match3 {

retstr = "black"

return

retstr = "auth"

return

if match4,_ := regexp.matchstring(`172\.((1[6-9])|(2[0-9])|(3[0-1]))\.(25[0-5]|2[0-4][0-9]|[0-1]?[0-9]?[0-9])\.(25[0-5]|2[0-4][0-9]|[0-1]?[0-9]?[0-9])`,ip); match4 {

retstr = "auth"

return

if match5,_ := regexp.matchstring(

`192\.168\.(25[0-5]|2[0-4][0-9]|[0-1]?[0-9]?[0-9])\.(25[0-5]|2[0-4][0-9]|[0-1]?[0-9]?[0-9])`,ip); match5 {

retstr = "auth"

return

//其餘位址或非法字串或入參為空,均為非法,直接拒絕。如果對上層呼叫者不信任,這裡可以再細化區別處理。

retstr = "black"

return retstr

正規表示式 匹配分組

功能 匹配左右任意乙個表示式 ab 將括號中字元作為乙個分組 num引用分組num匹配到的字串 p 分組起別名 p name 引用別名為name分組匹配到的字串 import re 水果列表 fruit list banana orange pear 遍歷資料 for value in fruit ...

JavaScript 正規表示式的分組匹配

下面的正規表示式可以匹配kidkidkid kidkidkid 而另一種更優雅的寫法是 kid 這裡由圓括號包裹的乙個小整體稱為分組。乙個分組中,可以有多個候選表示式,用 分隔 var reg i love him her it reg.test i love him true reg.test i...

JavaScript正規表示式的分組匹配詳解

分組 下面的正規表示式可以匹配kidkidkid kidkidkid 而另一種更優雅的寫法是 kid 這裡由圓括號包裹的乙個小整體稱為分組。候選 乙個分組中,可以有多個候選表示式,用 分隔 varreg i love him her it reg.test i love him true reg.t...