我有一个文本文件,我想匹配并删除以下文本(请注意换行符):
[ From:
http://www.website.com ]
以下代码有效
$text =~ s/\[.*\]//ms;
这个别人不
my $patt = \[.*\];
$text =~ s/$patt//ms;
有人会这么好心解释我为什么吗?提前致谢
我有一个文本文件,我想匹配并删除以下文本(请注意换行符):
[ From:
http://www.website.com ]
以下代码有效
$text =~ s/\[.*\]//ms;
这个别人不
my $patt = \[.*\];
$text =~ s/$patt//ms;
有人会这么好心解释我为什么吗?提前致谢
如果您引用模式字符串并消除语法错误,则第二个变体可以完美运行:
#!/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 没用。
您的变体不起作用的唯一原因是您没有在$patt
字符串周围加上引号。因为它会引发语法错误。这工作正常
my $patt = '\[.*\]';
$text =~ s/$patt//ms;
我唯一的评论是/m
修饰符是多余的,因为它修改了$
和^
锚的行为,您在这里没有使用。仅/s
需要.
匹配换行符。