Regex 正则表达式在不正确的情况下匹配字符串

Regex 正则表达式在不正确的情况下匹配字符串,regex,Regex,我如何编写一个正则表达式来匹配除一个以外的所有大小写字母组合中的特定字符串 例如,以字符串“SuperMario”为例。在所有其他大小写字母组合中,哪个正则表达式与该字符串匹配 正则表达式应匹配: 超级马里奥 超级马里奥 正则表达式不应匹配: 超级马里奥 超级玛丽 首选Perl兼容的正则表达式 my $s = "Supermario"; if ($s =~ /supermario/i and $s !~ /SuperMario/) { print "wrong\n"; } 另一

我如何编写一个正则表达式来匹配除一个以外的所有大小写字母组合中的特定字符串

例如,以字符串“SuperMario”为例。在所有其他大小写字母组合中,哪个正则表达式与该字符串匹配

正则表达式应匹配:

  • 超级马里奥
  • 超级马里奥
正则表达式不应匹配:

  • 超级马里奥
  • 超级玛丽
首选Perl兼容的正则表达式

my $s = "Supermario";
if ($s =~ /supermario/i and $s !~ /SuperMario/) {
    print "wrong\n";
}
另一种方法:

/(?:[S](?!uperMario)|s)[Uu][Pp][eE][rR][mM][aA][Rr][iI][oO]/

我的Perl已经生锈了,这不是在使用正则表达式,但是:

my $term = "SuperMario";
my $input = "SuperMario";
if ( $input ne $term && uc($input) eq uc($term) ){
    print "match";
}
您可以使用以下选项:

/(?!SuperMario)(?i)supermario/
编辑:

请注意,如果字符串包含其他内容,则使用lookback将有更好的性能:

/(?i)supermario(?<!(?-i)SuperMario)/

/(?i)supermario(?听起来像是odesk作业为CamelCase提供了正则表达式,并简单地否定了它。可能重复为什么必须使用正则表达式?必须是正则表达式吗?您想要的是区分大小写的字符串比较为false,不区分大小写的比较为true对不起,我实际上没有使用Perl,我使用的是接受Pe的东西与rl兼容的正则表达式。更新了问题以澄清。不过,您可以进行不区分大小写的匹配,也可以否定正确形式的结果。@JoeDaley,添加了另一个选项