我有一个文本文件,我想匹配并删除以下文字(请注意换行符):
[ From:
http://www.website.com ]
以下代码可以使用
$text =~ s/\[.*\]//ms;
这个没有
my $patt = \[.*\];
$text =~ s/$patt//ms;
有人会这么好解释为什么吗? 提前致谢
答案 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
才能使.
匹配换行符。