我正在實現一個腳本,該腳本將檢查給定正則表達式模式的一個或多個文件,並在文件包含任何匹配時提醒用戶。但是,我希望能夠允許用戶在文件內部指定異常(即不會被檢查的部分文件)。我想實現這個的方式是在文件中使用BEGIN:EXCEPTION和END:EXCEPTION標記。腳本現在工作的方式如下:匹配BEGIN和END標記內部不包含的模式
(在$假設文件內容_)
my $re_dirty = /hello world/; # Simple example
if($re_dirty) {
# alert that the pattern was found in the file
}
我試圖將此更改爲以下幾點:
my $re_dirty = /hello world/; # Simple example
my $begin_token = 'BEGIN:EXCEPTION';
my $end_token = 'END:EXCEPTION';
if($re_dirty && $_ !~ /${begin_token}.*${re_dirty}.*${end_token}) {
# alert that the patter was found and was not in an exception block
}
然而,這顯而易見的問題:
1.如果模式前後有異常,但模式本身不在異常內,則匹配。
2.如果模式在文件中兩次,但它們中只有一個在異常塊中,它將不匹配。
3.可能更多的問題?
一對夫婦有解釋性說明的:
1.異常可以跨越多行。
2.每個文件可以有多個異常塊。
我可能是錯的在此,但如果文件中有多個開始和結束異常標記,這不會有問題嗎?或者是替換正則表達式「貪婪」,因爲它會匹配它看到的第一個結束標記? – Kyle
@Kyle如果你使用'。*?'這意味着它是非貪婪的,儘可能少匹配。相反,可能會說。 – TLP
@TLP謝謝你的澄清 – Kyle