Regular-Expression
Perl 中的 Perl 變數擴展 m//
Perl 如何在
m//
匹配運算符中進行變數擴展?我讀過的是,m//
變數擴展/插值只做一次。但是,為什麼我會Unmatched ( in regex
在$pat
擴展時得到?my $pat = '(\\)'; '\\' =~ /(\\)/ ? print "OK\n" : print "NO MATCH!\n"; # OK '\\' =~ /$pat/ ? print "OK\n" : print "NO MATCH!\n"; # Unmatched ( in regex my $pat2 = '(\\\)'; '\\' =~ /$pat2/ ? print "OK\n" : print "NO MATCH!\n"; # OK
您的問題是您誤用或記錯了有關反斜杠的神秘規則。
在單引號字元串文字中,
反斜杠表示反斜杠,除非後跟分隔符或另一個反斜杠,在這種情況下,分隔符或反斜杠被插值。
所以 的值
$pat
是三個字元的字元串(\)
,因為原始碼中的反斜杠後面跟著另一個反斜杠,這代表一個反斜杠。的值$pat2
是四個字元的字元串(\\)
,因為原始碼中的前兩個反斜杠代表一個反斜杠,第三個反斜杠後面跟著,)
所以它單獨作為字元串中的第二個反斜杠。在正則表達式中,反斜杠引用下一個字元,除非它是字母數字。
/$pat/
等效於/(\)/
,它是開組,後跟文字右括號,並且)
缺少關閉組的 。/$pat2/
相當於/(\\)/
哪個是 open-group,反斜杠,close-group。