• ベストアンサー

正規表現

正規表現のパターンを変数内に入れて評価することは 可能なんでしょうか? たとえば、 my $value = " 0123"; my $patern = "\s.+"; if( $value =~ /$patern/ ) ~略~ のような感じです。

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

  • ベストアンサー
  • zebedeer
  • ベストアンサー率66% (80/121)
回答No.4

Perlのバージョンが合うなら(5.6以上だったかな?)正規表現パターンを「qr」で囲む方がお勧めです。 (速度的な有利と、正規表現をそのまま書けるので) [hoge@huga hoge]$ cat tmp.pl $\ = "\n"; $patern = qr/\s.+\w/io; print $patern if " 0123" =~ /$patern/; [hoge@huga hoge]$ perl tmp.pl (?i-xsm:\s.+\w) [hoge@huga hoge]$ こんな感じで。

その他の回答 (3)

  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.3

変数展開がどのようになり、どんなパターンができるかについての理解が必要ですが、可能です。 こんな感じ: my $value = " 0123"; my $patern = '\s.+'; if( $value =~ /$patern/ ){ print $&, "\n";} 詳しくは、perlopやperlre、perlfaq6などのマニュアルをご覧ください。

参考URL:
http://perldoc.jp/docs/perl/5.6.1/perlop.pod
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

そういう場合は、''で正規表現を囲みます my $value = " 0123"; my $patern = '\s.+'; if( $value =~ /$patern/ ){ print "yes"; } ””の場合は、何も表示されませんが、 ’’の場合はyesが表示されます

  • iichiho
  • ベストアンサー率37% (416/1114)
回答No.1

正規表現を直接変数に入れることはできません。 理由は、正規表現で加工される前の情報が無いからです。 でも、こういうの(↓)ならできますよ。 $text = 'other'; $text =~ s/^/M/; #sed の置換と同じです。 これで、「$text=Mother」になります。