有没有办法无论大小写比较两个字符串? 例如:
"steve" eq "STevE" <----- these would match
"SHOE" eq "shoe"
你明白了
是的- 使用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”运算符不区分大小写,可能可以使用重载,但我认为这不是你要问的 - 如果是这种情况,请澄清你的问题。如果你确实想要这样做,我的意见是这不是一个好主意——太脆弱了,会导致难以追踪和调试的严重错误。
此外,在你只需要相等性的特定情况下,Perl正则表达式还有不区分大小写的修饰符“i”,但在你的情况下,这是一种过度设计。
有几种方法可以实现这个:
使用lc
或者uc
操作符,分别将两个字符串转换为小写或大写:
lc "steve" eq lc "STevE";
一个简单的正则表达式就可以做到同样的效果:'steve' =~ /^STevE$/i;
fc("steve") eq fc("STevE")
在第一次使用fc
之前,请不要忘记添加这行代码:
use feature 'fc';
fc
类似于uc
/lc
,但能够处理非ASCII字符。 - PerlDuckuc
和lc
也可以很好地处理Unicode字符。 - Alexander Balyuk
"(?i-xsm:steve)" =~ /STevE/i
,而我本来期望的是( $_ =~ /steve/i ) =~ /STevE/i
,但在这里都不合适。 - ysth'steven' =~ /STevE/i;
也会返回真。 - Ven'Tatsu