46 lines
1.1 KiB
Go
46 lines
1.1 KiB
Go
package protocol
|
|
|
|
import "regexp"
|
|
|
|
// CreateRegexMatcher Création d'une instance de RegexMatcher
|
|
func CreateRegexMatcher(pattern string) *RegexMatcher {
|
|
compile, err := regexp.Compile(pattern)
|
|
if err != nil {
|
|
return nil
|
|
}
|
|
|
|
return &RegexMatcher{matcher: compile}
|
|
}
|
|
|
|
// RegexMatcher Propose des méthodes relatives au matching de chaine de caractère
|
|
type RegexMatcher struct {
|
|
matcher *regexp.Regexp
|
|
}
|
|
|
|
// Match Permet de vérifier la validité d'une donnée affiliée à un protocole
|
|
func (m RegexMatcher) Match(data string) bool {
|
|
return m.matcher.MatchString(data)
|
|
}
|
|
|
|
// Build Permet de construire une chaine respectant une commande. Retourne la chaine et bool (TRUE si correct et FALSE si incorrect)
|
|
func (m RegexMatcher) Build(cmd string, datas ...string) (string, bool) {
|
|
str := cmd
|
|
|
|
for _, data := range datas {
|
|
str += " " + data
|
|
}
|
|
|
|
str += "\r\n"
|
|
|
|
if m.Match(str) {
|
|
return str, true
|
|
} else {
|
|
return "", false
|
|
}
|
|
}
|
|
|
|
// Parse Permet de récupérer les différentes données de la chaine sur base du regex
|
|
func (m RegexMatcher) Parse(data string) []string {
|
|
return m.matcher.FindAllStringSubmatch(data, -1)[0]
|
|
}
|