Regex Perl不区分大小写的正则表达式不工作
以下是整个脚本:Regex Perl不区分大小写的正则表达式不工作,regex,perl,Regex,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 第一种情况匹配,第二种情况不匹配。我做错了什么?绑定操作符=~的字符串在左边,正则表达式在右边 这很奇怪。这有什么关系 在大多数算子中,参数的顺序是重要的;交换算子是罕见
#!/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
第一种情况匹配,第二种情况不匹配。我做错了什么?绑定操作符
=~
的字符串在左边,正则表达式在右边
这很奇怪。这有什么关系
在大多数算子中,参数的顺序是重要的;交换算子是罕见的
与2/3
3/2
与2-3
3-2
与2>3
3>2
,2
,^
,和
,ge
,gt
,le
,lt
,或
,x
和|
。这还没有提到具有多个参数的命名运算符,它们也可以作为函数,例如~
,拆分
,拼接
,连接
等。综合考虑所有因素,我很惊讶你会发现打开
是不可交换的 如果顺序不正确,为什么案例1有效而案例2无效 因为在=~
中,Perl将$reg=~“test”
强制为字符串,给出$reg
,将字符串强制为正则表达式,给出(?^ui:test)
。的确如此qr/test/
这是成功的,因为say "matched 1" if "(?^ui:test)" =~ /test/;
确实包含(?^ui:test)
。但是它不包含test
soTest
say "matched 1" if "(?^ui:test)" =~ /Test/
不打印任何奇怪的内容。如果顺序错误,为什么案例1有效,而案例2无效?无论如何,谢谢。因为案例1被解释为
,而第二个被解释为(?^ui:test)=~/test/
。在中搜索“字符串化”。参数的顺序对(?^ui:test)=~/test/
和==
很重要?因为那是我的误解。我像一个等式操作符一样看eq
,但(我现在看到)它不是。=~
say "matched 1" if "(?^ui:test)" =~ /Test/