需要知道几个正则表达式背后的逻辑

时间:2013-11-26 09:45:36

标签: regex perl

我的代码是

$wrk = OC192-1-1-1;

@temp = split (/-/, $wrk);

 if ($temp1[3] =~ /101 || 102 /)
{
    print "yes";
} else {
    print "no";
}

输出:

yes

需要知道为什么这是打印是的。我知道OR运算符支持正则表达式|。但需要知道为什么||正在给予"是"作为输出

3 个答案:

答案 0 :(得分:9)

这是因为||将通过始终与任何内容匹配来使正则表达式匹配成功。

所以它实际上是匹配$temp1[3](不存在)与以下任何人

  • "101 "
  • ""
  • " 102 "

我添加双引号只是为了解释。

答案 1 :(得分:7)

/101 || 102 /正则表达式尝试匹配'101 '''(空字符串)或' 102 '

由于空字符串始终可以匹配,因此在您的条件中它始终返回true。

答案 2 :(得分:3)

除了来自@anubhava的正则表达式相关答案之外,请注意:OC192-1-1-10-1-1-1相同,只是"-3",因此@temp计算为{ {1}}

当然,没有( "", "3" )

这样的东西