正規表現の最短マッチ

  • 122
    いいね
  • 6
    コメント
この記事は最終更新日から1年以上が経過しています。

今さらだけど、最短マッチ

URLを解析して、特定パターンに合致する文字列を取り出したかったのです。

http://hoge.com/hoge/fuga/goods/

ここから、スラッシュで囲まれた最初のブロックの文字列…
今回の場合は hoge だけ取り出したい。

最初はこう書いてましたが。

誤.rb
url.match(/^http:\/\/hoge.com\/(.*)\//)

これだと、引っかかるのは「hoge/fuga/goods」になる(´・ω・`)
条件として指定している「/」は、一番最後のを使っている形になってますね。
違うんです、一番最初に出てきた「/」を区切りとして使いたいんです!

てなわけで、最短マッチのメタ文字を追加。

正.rb
url.match(/^http:\/\/hoge.com\/(.*?)\//)

任意の1文字の繰り返しを最短で切り上げるため、(.*)に「?」を入れます。

すると、期待通りに「hoge」だけ取れるようになりました。

デフォルトは最長マッチになっているけど、最短もよく使うので覚えておく。

参考:
http://d.hatena.ne.jp/cloned/20061110#c