簡體   English   中英

當反斜杠存儲在Perl中的數組中時,在正則表達式中不起作用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM