代码之家  ›  专栏  ›  技术社区  ›  shinjuo

比较两个字符串,不管Perl中大小写如何

  •  10
  • shinjuo  · 技术社区  · 14 年前

    不管大小写如何,是否有比较两个字符串的方法? 例如

    "steve" eq "STevE"   <----- these would match
    "SHOE" eq "shoe"
    

    你拿到照片了

    3 回复  |  直到 7 年前
        1
  •  19
  •   DVK    14 年前

    是-使用 uc() (大写函数;请参见 http://perldoc.perl.org/functions/uc.html )

    $ perl -e 'print uc("steve") eq uc("STevE"); print "\n";'
    1
    $ perl -e 'print uc("SHOE") eq uc("shoe"); print "\n";'          
    1
    $ perl5.8 -e 'print uc("SHOE") eq uc("shoe1"); print "\n";'
    
    $
    

    显然你可以用 lc() 也。

    如果您希望实际的“eq”运算符不区分大小写,可能会使用重载,但我认为这不是您所要求的-如果是这样,请澄清您的问题。如果你真的想这样做,这也不是一个好主意,imho-太脆弱,导致主要的可能难以跟踪和调试的错误。

    另外,在您只希望相等的特定情况下,这是一种过度杀伤力,但是Perl正则表达式也有独立于大小写的修改器“i”。

        2
  •  9
  •   Zaid    14 年前

    有几种方法可以做到这一点:

    • 使用 lc uc 运算符,它将两个字符串分别转换为小写或大写:

      lc "steve" eq lc "STevE";

    一个简单的regex也可以:

    'steve' =~ /^STevE$/i;
    
        3
  •  1
  •   Alexander Balyuk    7 年前

    根据Perldoc( http://perldoc.perl.org/functions/fc.html )最好用

    fc("steve") eq fc("STevE")
    

    在第一次使用 fc :

    use feature 'fc';