如何在替换中使用变量?

时间:2013-07-21 12:32:31

标签: perl

我有一个文本文件,我想匹配并删除以下文字(请注意换行符):

[ From:
http://www.website.com ]

以下代码可以使用

$text =~ s/\[.*\]//ms;

这个没有

my $patt = \[.*\];
$text =~ s/$patt//ms;

有人会这么好解释为什么吗? 提前致谢

2 个答案:

答案 0 :(得分:3)

如果引用模式字符串并消除语法错误,则第二个变体可以正常工作:

#!/usr/bin/perl

use strict;
use warnings;

my $text = qq{a[ From:
http://www.website.com ]b};

my $patt = qr/\[.*?\]/s;
$text =~ s/$patt//;

print $text;

打印:

ab
我加了?量化到正则表达式以使替换无效。并删除了m修饰符,因为你没有在你的正则表达式中使用^和$,所以m是没用的。

答案 1 :(得分:1)

您的变体无效的唯一原因是您没有在$patt字符串周围加上引号。因为它会抛出语法错误。这很好用

my $patt = '\[.*\]';
$text =~ s/$patt//ms;

我唯一的评论是/m修饰符是多余的,因为它修改了$^锚点的行为,您在这里没有使用它们。只有/s才能使.匹配换行符。