正規表現で名前付きキャプチャを使う
正規表現パターンがある程度ややこしくなると、後方参照でキャプチャの順番を書くのが大変になります。
そこで番号ではなくて名前でキャプチャを指定できるという名前付きキャプチャを試してみました。
Perlでは(?<name>)
とするとキャプチャに名前が付きます。
名前付きキャプチャで補足した結果は%+
というハッシュに記憶されるようです。
サンプル。
my $str = '0123 The message: "The weather today is great" is displayed.'; my $p = '\A(?<no>\d+).*?"(?<quoted>.*?)".*\Z'; $str =~ /$p/; # 名前付きキャプチャは$+{name}で参照できる my $index = $+{no}; # 0123 my $quoted = $+{quoted}; # The weather today is great
このときの%+
をダンプしてみるとこんなふうになってました。
use Data::printer; p %+;
普通のハッシュです。
Tie::Hash::NamedCapture
というものがあるようです。
{ no "0123", quoted "The weather today is great" } (tied to Tie::Hash::NamedCapture)
感想
キャプチャした箇所をハッシュにまとめられるので、管理しやすそうだと思いました。