如何使用'($ RE {num} {real})'作为正则表达式?

时间:2013-04-07 20:11:29

标签: regex perl

在下面的代码中,我想让gf打印相同的输出。差异是($RE{num}{real})$以字符串形式给出。有人现在如何将其转换为正则表达式?

~/linux/test/perl/library/Regexp/Common/%RE/num/real$ cat main1.pl
#!/usr/bin/env perl

use strict;
use warnings;
use autodie;

use FindBin;
use lib "$FindBin::Bin/.";

use Regexp::Common;

sub f {
  my $x = shift;
  $x =~ s/^($RE{num}{real})$/$1 is real/;
  print "$x\n";
}

f("1.5");
f("15f");
f("1e5");
f(".1e5");
f("a");

my $regex_str='($RE{num}{real})';
#Neither of the following work.
#$regex_str=eval $regex_str;
#$regex_str=qr{$regex_str};
sub g {
  my $x = shift;
  $x =~ s/^$regex_str$/$1 is real/;
  print "$x\n";
}

g("1.5");
g("15f");
g("1e5");
g(".1e5");
g("a");


~/linux/test/perl/library/Regexp/Common/%RE/num/real$ ./main1.pl 
1.5 is real
15f
1e5 is real
.1e5 is real
a
1.5
15f
1e5
.1e5
a

3 个答案:

答案 0 :(得分:2)

my $regex_str="($RE{num}{real})";

my $regex_str=qr/($RE{num}{real})/;

答案 1 :(得分:1)

Perl中的单引号不插入变量。使用双引号来插入变量。但是,要创建正则表达式,可以使用qr//运算符:

my $regex = qr/$RE{num}{real}$/;
if ( $x !~ $regex ) { 

答案 2 :(得分:0)

一个问题是你最后有两个$令牌:

my $regex_str='$RE{num}{real}$';
...
if( $x !~ /^$regex_str$/) {