-3

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

正規表現「エンジン」の最後の式の何が問題なのかわかりませんが、括弧内のものだけを覚えておく必要があります。

4

1 に答える 1