私は、パラメータを取り込むfind_replaceサブルーチンを持っています(コンテンツ、正規表現の検索、正規表現の置き換え、結果変数の結果格納)。私はqr//
を使用して、検索正規表現と置き換え正規表現の両方を渡します。 regexがうまく動作するが、regexを置き換えることはできません。qr //を使用してサブルーチンにRegExを置き換えます
$text = "11 22 33 44 55";
find_replace($text,qr/(33)(.*?)(55)/,qr/$1<BOLD>$2<\/BOLD>$3/,my $newText);
print $newText;
#Should print: 11 22 <I>33 <B>44</B> 55</I>
#But it prints: 11 22 <I>(?^:<B></B>)</I>
sub find_replace {
my $content = shift;
my $findRegEx = shift;
my $replaceRegEx = shift;
my $newVariable = \shift;
${$newVariable} = $content;
${$newVariable} =~ s/$findRegEx/<I>$replaceRegEx<\/I>/g;
}
私はこのための修正プログラムが動作するように見つけた:
$text = "11 22 33 44 55";
find_replace($text,qr/(33)(.*?)(55)/,sub{"$1<B>$2<\/B>$3"},my $newText);
print $newText;
#Prints: 11 22 <I>33 <B>44</B> 55</I>
sub find_replace {
my $content = shift;
my $findRegEx = shift;
my $replaceRegEx = shift;
my $newVariable = \shift;
${$newVariable} = $content;
${$newVariable} =~ s($findRegEx){ "<I>".$replaceRegEx->()."<\/I>" }ge;
}
しかし、この修正プログラムはsub{"…"}
の代わりqr/…/
使用しています。私が探しているのは、置換正規表現を渡して同じ結果を得るためにqr//
を使い続けることです。
交換部品*は正規表現*ではありません。それを一つにしようとしないでください。サブ{}方法はこれを行う正しい方法です。 – ysth
あなたは何をする必要があるのか(たとえば)を参照してください[この投稿](http://stackoverflow.com/a/41280344/4653379) – zdim
@zdimこのコードは、['Data :: Munge :: replace'](https://metacpan.org)を使用することで大幅に簡略化することができます。/pod/Data :: Munge#replace-STRING、-REGEX、-REPLACEMENT、-FLAG)。 – melpomene