首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > perl python >

Perl 正则表达式替换为 $1 时出有关问题

2013-01-01 
Perl 正则表达式替换为 $1 时出问题以下代码,先是将 09:31 转换成 31-09 ,成功。现在希望替换格式不要在代

Perl 正则表达式替换为 $1 时出问题
以下代码,先是将 09:31 转换成 31-09 ,成功。
现在希望替换格式不要在代码中写死,希望能在运行时由用户输入。为了叙述方便,此处假设输入后保存在 $replace 中了。继续运行,期望将 11:59 转换为 59-11 ,结果转换成 $2-$1 了。求高手指点。

#! /usr/bin/perl -w
use strict;

my $text;
my $regex = '(\d+):(\d+)';
my $replace = '$2-$1';

$text = '09:31';
$text =~ s/$regex/$2-$1/;
print $text, "\n";# 输出期望值31-09

$text = '11:59';
$text =~ s/$regex/$replace/;
print $text, "\n";# 输出$2-$1


=============== When: 2012-11-19  Where: bbs.csdn.net  Who: zjs100901  Which: 0005 ===============
==================== 以下为 CSDN 广告,与楼主发贴内容无关,如有瓜葛,纯属巧合 ====================


[解决办法]
#! /usr/bin/perl -w 
use strict;
my $text; 
my $regex = '(\d+):(\d+)'; 
my $replace = '$2-$1';   
$text = '09:31'; 
$text =~ s/$regex/$2-$1/; 
print $text, "\n";    # 输出期望值31-09   
$text = '11:59'; 
eval("\$text =~ s/$regex/$replace/;");
print $text, "\n";    # 输出$2-$1
 
[解决办法]
在双引号中可以进行字符串插值,
即:"\$text =~ s/$regex/$replace/;"); 
最后得到:"$text=~s/(\d+):(\d+)/$2-$1/"
\$text是避免perl将$text进行插值,而应该保持$text原样。
将插值后的字符串放入eval函数中执行,那么,就可以动态执行代码。

热点排行