我正在创建一个脚本来从命令行获取正则表达式输入并处理它; 这样的事情:
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没有从命令行处理正则表达式输入.
有关如何使这项工作的任何建议?
谢谢!
使用$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)
等等