正規表現 最短マッチ

最短マッチ

躓くことが多いのでメモ。

最短マッチを考える際には通常マッチから考えるとわかりやすい。

  • 通常マッチは一番長いパターンをマッチ
  • 最短マッチは一番短いパターンをマッチ

通常マッチは一番長いパターンと認識することが重要

例) テキスト例:「hoge」「hoge2」

ケース1 通常マッチケース /「.+」/ →この場合  と の範囲をマッチ。 テキスト例では「と」が一番長い範囲をマッチさせます。

ケース2 最短マッチケース /「.+?」/

→この場合  と のパターンの最短ケースを マッチさせます。 ポイントは量指定子(?や*)の前に? をつけることです。 (量指定子はなれるまであまり考えなくては良いかも)

hoge = "「hoge」「hoge」"

puts hoge.scan(/「.+」/)[0]  #→["「hoge」「hoge2」"]
puts hoge.scan(/「.+?」/)[0] #["「hoge」"]