[golang]regexpを使って文中からURLを取得する

こんにちは。KOUKIです。

とある企業で、Go言語を使ってWebシステムを開発しています。

開発経験は4年くらいあるのですが、正規表現が苦手です^^;

Go言語では、regexpパッケージを使うと正規表現の処理が書けます。本記事は、その備忘です。

最初にregexpの使い方を紹介して、最後に文中からURLを取得してみようと思います。

regexpの基礎

regexp.MatchString

最初に、簡単な正規表現を書いてみます。

上記のMatchStringには、第一引数に正規表現パターン、第二引数に検索対象の文字列を入れます。これで正規表現処理がかけます。

「a([a-z]+)e」は、最初の文字が「a」、最後の文字が「e」、その間の文字が「a~z」の1個以上の文字列を検索します。

プログラムを実行してみましょう。

正規表現にマッチした場合は、trueが返却されます。逆にマッチしない場合は、falseが返却されます。

regexp.MustCompile

regexp.MustCompileは、正規表現のオプティマイズをしてくれます。正規表現のマッチングをプログラム内で何度も使いたい場合は、こちらを使った方がいいらしいです。

URLの正規表現

基本が分かったところで、URLの正規表現をやっていきましょう。

FindString

最初は、文中からではなく、URLの一部分を使った正規表現にチャレンジしましょう。

FindStringは、正規表現でマッチした文字列を取得できます。

マッチしなかったら空の状態で返却されます。

FindStringSubmatch

FindStringSubmatchを使うと以下のようなこともできます。

ご覧の通り、マッチした文字列の一部分を取得できます

文中からURLを取得する

最後に、本記事の目的である文中からURLを取得する処理を実装してみましょう。

messageを文中とします。取得したいURLが「http://localhost/hoge/hoge」なので、正規表現パターンを「”http(.)://(.)/(.)/(.)”」にしました。

このパターンは、URLの状況によって変えてください。

プログラムを実行すると文中からURLのみ取得できたことがわかります。

尚、「http(.*)」の(.*)は、httpsでも対応できるようにしています。

別パターンも作ってみました。

便利ですね。

おわりに

Go言語のregexpパッケージを使えば、自由自在に文字列をとってこれそうですね。

まぁ、正規表現パターンが書ければですけど^^;

それでは、また!

Go記事まとめ

コメントを残す