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

Fra*_*wis 4 regex perl

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

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

$name =~ $regex;

print $name . "\n";
Run Code Online (Sandbox Code Playgroud)

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

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

谢谢!

Chr*_*ung 8

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

例如,

$name =~ s/$pattern/$replacement/;
Run Code Online (Sandbox Code Playgroud)

如果指定两个模式和替代在相同的参数,例如,在形式s/foo/bar/,你必须给他们先被分割:

my (undef, $pattern, $replacement) = split '/', $regex;
$name =~ s/$pattern/$replacement/;
Run Code Online (Sandbox Code Playgroud)

原始答案:

用途qr//:

$name =~ qr/$regex/;
Run Code Online (Sandbox Code Playgroud)

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

$compiled = qr/$regex/;
$name =~ $compiled;
$name =~ s/$compiled/foobar/;
Run Code Online (Sandbox Code Playgroud)

等等