電子書籍の厳選無料作品が豊富!

正規表現のパターンを変数内に入れて評価することは
可能なんでしょうか?

たとえば、

my $value = " 0123";
my $patern = "\s.+";

if( $value =~ /$patern/ )
~略~

のような感じです。

A 回答 (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]$
こんな感じで。
    • good
    • 0

変数展開がどのようになり、どんなパターンができるかについての理解が必要ですが、可能です。



こんな感じ:

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
    • good
    • 0

そういう場合は、''で正規表現を囲みます


my $value = " 0123";
my $patern = '\s.+';

if( $value =~ /$patern/ ){
print "yes";
}
””の場合は、何も表示されませんが、
’’の場合はyesが表示されます
    • good
    • 0

正規表現を直接変数に入れることはできません。


理由は、正規表現で加工される前の情報が無いからです。

でも、こういうの(↓)ならできますよ。

$text = 'other';
$text =~ s/^/M/; #sed の置換と同じです。

これで、「$text=Mother」になります。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!