使用perl,如何处理从命令行输入中获取的正则表达式?

时间:2011-08-07 04:18:51

标签: regex perl

我正在创建一个脚本来从命令行获取正则表达式输入并处理它;像这样的东西:

chomp(my $regex = $ARGV[0]);
my $name = '11528734-3.jpg';

$name =~ $regex;

print $name . "\n";

我对脚本的输入是:“s / .jpg / _thumbnail.jpg / g” 但是$ name没有从命令行处理正则表达式输入。

关于如何使这项工作的任何建议?

谢谢!

1 个答案:

答案 0 :(得分:8)

使用$name =~ $regex不会更改$name。您必须使用s///运算符来实现任何更改。

如,

$name =~ s/$pattern/$replacement/;

如果您在同一参数中指定两者模式和替换,例如,以s/foo/bar/的形式,则必须先拆分它们:

my (undef, $pattern, $replacement) = split '/', $regex;
$name =~ s/$pattern/$replacement/;

原始答案:

使用qr//

$name =~ qr/$regex/;

您也可以使用$name =~ /$regex/,但qr版本更为通用,因为您可以存储正则表达式对象供以后使用:

$compiled = qr/$regex/;
$name =~ $compiled;
$name =~ s/$compiled/foobar/;