Tbpgr Blog

元エンジニア 人事 tbpgr(てぃーびー) のブログ

書籍 Regular Expressions Cookbook | Eliminate Needless Backtracking

パンくず

書籍 Regular Expressions Cookbook
Eliminate Needless Backtracking

概要

(独占的|絶対最大)量指定子について。
後戻りしてのマッチングをしない。

構文

/(target++)/

サンプル

DragonQuestに対して、1文字以上の任意の文字(\w+)と(Quest)でマッチングを行います。
この場合は、はじめの部分でDragonQuest全体がマッチした後、再度後戻りしてQuestをマッチングします。
ここで、独占的量指定子で(\w++)と(Quest)で指定した場合、後戻りしないためQuestをマッチングしません。
このケースで言うと、Questをマッチングさせる必要がないような場合後戻りしないために動作が高速になります。

puts "DragonQuest".gsub(/(\w+)(Quest)/,'match!! \1-\2') #=> 置換結果:match!! Dragon-Quest
puts "DragonQuest".gsub(/(\w++)(Quest)/,'\1-\2') #=end マッチせず