• ベストアンサー

正規表現での$1や$2の使用方法

正規表現の置き換え文字列部分で使用できる$1や$2の使用方法を教えてください! 以下のソース1のようにs///gの置き換え文字列部分に$1や$2を直接記述すれば、1つ目と2つ目のマッチ部分で置換が行われるのは確認しました。 しかし、ソース2のように置き換え文字列部分を変数に代入したのち、使用すると、正しく置換が行われません。 $1や$2を含んだ置き換え文字列を変数に持っている状態で、ソース1と同じ結果を得るにはどうしたらよいか、ご存知でしたら教えて下さい。 ############################## # ソース1 ############################## #!/usr/bin/perl $data = '1234567'; $ptn = '(\d{3})(\d{4})'; $data =~ s/$ptn/$1-$2/g; ############################## ↓ $dataは123-4567となる。 ############################## # ソース2 ############################## #!/usr/bin/perl $data = '1234567'; $ptn = '(\d{3})(\d{4})'; $str = "$1-$2"; $data =~ s/$ptn/$str/g; ############################## ↓ $dataは-となる。

質問者が選んだベストアンサー

  • ベストアンサー
  • moon_piyo
  • ベストアンサー率60% (88/146)
回答No.1

こんにちは~ たとえばこんな感じでは $data = '1234567'; $ptn = '(\d{3})(\d{4})'; $str = '$1-$2'; eval "\$data =~ s/$ptn/$str/g";

hiro--pon
質問者

お礼

期待していた結果が得られましたー。 evalを使用するのですね。勉強になります。 本当にありがとうございました。

その他の回答 (1)

  • kumoz
  • ベストアンサー率64% (120/185)
回答No.2

No1 よりも劣るかも知れませんが、別の方法で.....。 $str = '$1-$2'; $data =~ s/$ptn/"\"$str\""/eeg;

関連するQ&A