regexp值与string相比较

时间:2017-04-12 18:38:56

标签: go

func main() {

    var ip string
    fmt.Print("Host: ")
    fmt.Scanln(&ip)

    addr, _ := net.LookupAddr(ip)

    app := "grep"
    arg0 := "inst"
    arg1 := "acl.yaml"

    cmd := exec.Command(app, arg0, arg1)
    stdout, err := cmd.Output()
    x := string(stdout)

    reg, _ := regexp.Compile(`(internal)`)
    if err != nil {
        println(err.Error())
        return
    }
    if ip != "" {
        validateIP(ip)
    }
    fmt.Println(x)
    fmt.Println(addr[0])
    //fmt.Println(stdout)
    if addr[0] == reg.FindString(`(internal)`){
        file, err := os.Open("ports.json")
        if err != nil {
            panic(err)
        }
        defer file.Close()
        ports := []portDef{}
        err = json.NewDecoder(file).Decode(&ports)
        if err != nil {
            panic(err)
        }

        for _, p := range ports {
            conn, err := net.Dial(p.Protocol, ip + ":" + p.Port)
            if conn != nil {
                fmt.Println("")
                fmt.Printf("Connection established between %s and Localhost.\n", addr)
                fmt.Printf("Remote Address : %s \n", conn.RemoteAddr().String())
                fmt.Printf("Local Address : %s \n", conn.LocalAddr().String())
            }
            fmt.Println("")
            if err != nil {
                fmt.Println(err)
            }
        }
    }
}

我试图将正则表达式值与字符串进行比较。在这种情况下,我希望将"addr"的值与正则表达式进行比较,如果addr的值中包含“internal”,则打开所选文件并遍历端口。从LookupAddr返回的地址始终在box.internal.blah.blah.com中,所以我在寻找地址中的第二个字段(在本例中为内部)与正则表达式进行比较,如果找到地址中的“内部”将循环通过循环。

我知道我的正则表达式很可能是错误的。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

您可以使用Regexp.MatchString方法执行您想要的操作。

if re.MatchString(addr[0]) {
    // ...
}

https://play.golang.org/p/UvB16idiyf

文档中有很多示例,请查看它们:https://golang.org/pkg/regexp/#pkg-examples