這裏是整個腳本:Perl的不區分大小寫的正則表達式不工作
#!/usr/bin/perl
use v5.14; use warnings;
my $reg = qr/test/i;
say "matched 1" if $reg =~ "test"; # matches
say "matched 2" if $reg =~ "Test"; # no match
第一種情況相匹配,第二個沒有。我究竟做錯了什麼?
這裏是整個腳本:Perl的不區分大小寫的正則表達式不工作
#!/usr/bin/perl
use v5.14; use warnings;
my $reg = qr/test/i;
say "matched 1" if $reg =~ "test"; # matches
say "matched 2" if $reg =~ "Test"; # no match
第一種情況相匹配,第二個沒有。我究竟做錯了什麼?
的結合操作=~
有串在左,並在權的正則表達式。
"test" =~ $reg;
這是奇怪的。爲什麼這很重要?
在大多數操作員中參數的順序是顯着的;交換運營商是一個罕見的。
2/3
是從3/2
2 - 3
不同距離3 - 2
2 > 3
不同距離3 > 2
2 << 3
不同距離3 << 2
$x = 2
不同距離2 = $x
我明顯可以繼續。同樣的道理也適用於!=
,!~
,%
,&&
,*
,**
,*=
,+
,+=
,,
,-
,-=
,->
,.
,..
,...
,/
,//
,<
,<<
,<=
,=
,=>
,=~
,>
,>=
,>>
,^
,and
,ge
,gt
,le
,lt
,or
,x
,||
和~~
。而這是不具有一個以上的參數,也表現爲功能,如split
,splice
,join
,open
等所有的事情考慮提命名的運營商,我驚訝你覺得離奇的是=~
是不可交換的
爲什麼情況1工作,但不是情況2,如果他們在錯誤的順序?
因爲在$reg =~ "test"
,Perl的要挾$reg
爲一個字符串,給人(?^ui:test)
和字符串到一個正則表達式,從而qr/test/
。所以它
say "matched 1" if "(?^ui:test)" =~ /test/;
因爲(?^ui:test)
確實含有test
這是成功的。然而,它不包含Test
所以
say "matched 1" if "(?^ui:test)" =~ /Test/
打印什麼
參數的順序對於'=='和'eq'很重要嗎?因爲那是我的誤解。當我(現在看到的)不是的時候,我正在考慮'=〜'就像一個平等運算符。 – felwithe
這是奇怪的。爲什麼情況1能夠正常工作,而不是情況2如果順序錯誤?無論如何謝謝你。 – felwithe
因爲情況1被解釋爲''(?^ ui:test)'=〜/ test /',而第二個被解釋爲''(?^ ui:test)'=〜/ Test /'。在[perlre](http://p3rl.org/perlre)中搜索「字符串化」。 – choroba