Perl不区分大小写的正则表达式无法正常工作

时间:2015-10-04 13:05:09

标签: 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

第一种情况匹配,第二种情况不匹配。我做错了什么?

2 个答案:

答案 0 :(得分:7)

绑定操作符=~左侧上有字符串,在右侧正则表达式 / em>的

"test" =~ $reg;

答案 1 :(得分:2)

  

这很奇怪。为什么会这么重要?

大多数运营商的参数顺序都很重要;交换运营商很少见。

  • 2 / 33 / 2
  • 不同
  • 2 - 33 - 2
  • 不同
  • 2 > 33 > 2
  • 不同
  • 2 << 33 << 2
  • 不同
  • $x = 22 = $x
  • 不同

我显然可以继续。同样的事情也适用于!=!~%&&****=,{{1 }},++=,--=->......///<<<<===>,{ {1}},=~>>=>>^andge,{{1 },gtleltor。并且没有提到具有多个参数的命名运算符,这些参数也表现为函数,例如x||~~split等。所有事情都考虑在内,我感到惊讶你发现splice是非交换性的

是奇怪的
  

为什么案例1会起作用,但如果案件2的顺序错误则不是案例2?

因为在join中,Perl将open强制转换为字符串,将=~和字符串强制转换为正则表达式,并赋予$reg =~ "test"。所以它确实

$reg

这是成功的,因为(?^ui:test)确实包含qr/test/。但是包含say "matched 1" if "(?^ui:test)" =~ /test/; 所以

(?^ui:test)

什么都不打印