package main import ( "bufio" "bytes" "log" "regexp" "strings" "time" "github.com/asaskevich/govalidator" ) func parseComplex(data []byte) []string { defer timeTrack(time.Now(), "parseComplex") var domains []string // convert data to reader for line-by-line reading r := bytes.NewReader(data) // process combined files line-by-line scanner := bufio.NewScanner(r) for scanner.Scan() { line := scanner.Text() // skip lines where the first non-whitespace character is '#' or '//' if regexp.MustCompile(`^(\s+)?(#|\/\/)`).MatchString(line) { continue } // skip lines with no characters and/or whitespace only if regexp.MustCompile(`^(\s+)?$`).MatchString(line) { continue } // split line by whitespace lineItems := strings.Fields(line) if len(lineItems) >= 2 { // the second item is the domain, check if its valid and add it if govalidator.IsDNSName(lineItems[1]) { domains = append(domains, lineItems[1]) } else { log.Printf("[TRACE] Domain is not valid: %s\n", lineItems[0]) } } } return domains }