[英]Backslash not working in regex when stored in an array in Perl
我正在為一個項目開發一個簡單的詞法分析器,並且正在使用數組將正則表達式模式存儲為字符串。
我分別測試每個正則表達式模式,以確保檢查文件行時得到正確的輸出。
問題是,一旦我將這些字符串存儲在數組中,我就會開始遇到一些錯誤。 主要是在搜索以反斜杠\\
開頭的字符串時。
這是我的Perl代碼
#!/usr/bin/perl
@PATTERNS = ("\\begin", "\\end", "{", "}", "<\d+(\.\d+)?>", "<p>", "<\\p>", ".*", "%%+", "<%", "%>") ;
print "Enter some text: ";
chomp( $input = <> );
print test();
sub test() {
my $arrSize = @PATTERNS;
for ( my $i = 0; $i < $arrSize; $i++ ) {
if ( $input =~ /$PATTERNS[$i]/gi ) {
print "good input\n";
}
else {
print "bad input\n";
}
}
}
上面是我的測試文件,用於讀取我手動鍵入以檢查regex表達式的行,如果匹配則給我一個好的輸入,否則就給我一個不好的輸入。
不管我如何在每個字符串中使用Perl,Perl都會繼續跳過我的反斜杠。
我正在使用隨Ubuntu 14.04一起安裝的默認Perl v5.18.2。
雙引號中的字符串在Perl中“內插”。 反斜杠在這里具有特殊含義。 如果要將正則表達式存儲在數組中,最好使用qr//
構造:
my @PATTERNS = ( qr/\\begin/,
qr/\\end/,
qr/{/,
qr/}/,
qr/<\d+(\.\d+)?>/,
qr/<p>/,
qr(</p>), # I assumed HTML/PHP, so replaced \p.
qr/.*/,
qr/%%+/,
qr/<%/,
qr/%>/,
) ;
您應該使用警告 ,它們會警告您一些錯誤:
Unrecognized escape \d passed through at /home/choroba/1.pl line 5.
Unrecognized escape \d passed through at /home/choroba/1.pl line 5.
main::test() called too early to check prototype at /home/choroba/1.pl line 10.
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.