キーが正規表現で、値が置換であるハッシュを作成しようとしています。同様の構造を作成し、「select * from table where $lookup RLIKE `key`」などのクエリを使用して、MySQL データベースでこれを実行しましたが、正常に動作します。perl スクリプトで同じことを試して、より効率的に実行できるかどうかを確認したいと考えています。これをループにして各キーをチェックできることはわかっていますが、それが望ましくないため、正規表現文字列を作成しました。私が理解できない唯一の部分は、一致した正規表現 (変更) の一部を返すように perl を取得する方法です...
%s = (
'^mynumbers-(\d+)$' => 'thenumber-$1' ,
'^myletters-([a-zA-Z])$' => 'theletter-$1'
);
#build a string of the hash keys into a regex
while (keys %s) {
$regex_string.="($_)|";
}
#this is the input that will be looked up
$lookup = 'mynumbers-123';
if ($lookup=~/$regex_string/) {
print "found->$lookup in the regex\n";
$matched_regex = $i_dont_know;
### How do I know which subgroup it matched???
### I need to know so I can do this
$lookup=~s/\Q$i_dont_know\E/\Q$s{$matched_regex}\E/;
}