我有一個文本文件,我想匹配並刪除下面的文本(請注意換行):如何在替換中使用變量?
[ 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
才能使.
與換行符匹配。
爲什麼沒有引號的字符串「工作」?並且請比['不起作用]更具體(http://tlp-perl.blogspot.se/2013/06/its-not-working.html) – TLP
你是完全正確的,我的「它不起作用「意味着代碼不匹配任何東西,因此文本不會被刪除。 – Daniele
是的,這是一個公平的猜測。但是,您有多行輸入,如果您正在從文件或類似文件中讀取數據,則可能會出現問題。 – TLP