Go の組み込み正規表現 pkg のドキュメントはこちら: https://golang.org/pkg/regexp/ Go の正規表現 テスター: https://regoio.herokuapp.com
定義済みの単語のリストがあります。
christmas, santa, tree ( -> the order here is important. Check for words from left to right)
異なる URL 文字列で上記の単語のいずれかを確認しようとしています。
/api/container/:containerID/santa ( -> I want back santa)
/api/tree/:containerID/ ( -> I want back tree)
/api/tree/:containerID/christmas ( -> I want back christmas, not tree)
私が試した正規表現は次のとおりです。
re := regexp.MustCompile(`^(christmas)|(santa)|(tree)$`)
fmt.Println("santa? ", string(re.Find([]byte(`/api/container/:containerID/santa`))))
// output OK: santa? santa
fmt.Println("tree? ", string(re.Find([]byte(`/api/tree/:containerID/`))))
// output FAIL/EMPTY: tree?
fmt.Println("christmas? ", string(re.Find([]byte(`/api/tree/:containerID/christmas`))))
// output FAIL/EMPTY: christmas?
次のことも試しましたが、探している単語ではなく、穴の文字列が返されます。
re := regexp.MustCompile(`^.*(christmas).*|.*(santa).*|.*(tree).*$`
fmt.Println("santa? ", string(re.Find([]byte(`/api/container/:containerID/santa`))))
// output FAIL/HOLE URL BACK: santa? /api/container/:containerID/santa
fmt.Println("tree? ", string(re.Find([]byte(`/api/tree/:containerID/`))))
// output FAIL/FAIL/HOLE URL BACK: tree? /api/tree/:containerID/
string(re.Find([]byte(`/api/tree/:containerID/christmas`))))
// output FAIL/FAIL/HOLE URL BACK: christmas? /api/tree/:containerID/christmas
正規表現「エンジン」の最後の式の何が問題なのかわかりませんが、括弧内のものだけを覚えておく必要があります。