0

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

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

以下代码有效

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

这个别人不

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

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

4

2 回答 2

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 没用。

于 2013-07-21T12:40:54.207 回答
1

您的变体不起作用的唯一原因是您没有在$patt字符串周围加上引号。因为它会引发语法错误。这工作正常

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

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

于 2013-07-21T13:22:29.057 回答