特定の文字列に一致する正規表現を、1 つを除いて大文字と小文字のすべての組み合わせに一致させるにはどうすればよいですか?
たとえば、「SuperMario」という文字列を考えてみましょう。大文字と小文字の他のすべての組み合わせで、その文字列に一致する正規表現は何ですか?
正規表現は次のように一致する必要があります。
- スーパーマリオ
- スーパーマリオ
正規表現は一致してはなりません:
- スーパーマリオ
- スーパーマリ
Perl 互換の正規表現が推奨されます。
特定の文字列に一致する正規表現を、1 つを除いて大文字と小文字のすべての組み合わせに一致させるにはどうすればよいですか?
たとえば、「SuperMario」という文字列を考えてみましょう。大文字と小文字の他のすべての組み合わせで、その文字列に一致する正規表現は何ですか?
正規表現は次のように一致する必要があります。
正規表現は一致してはなりません:
Perl 互換の正規表現が推奨されます。
これを使用できます:
/(?!SuperMario)(?i)supermario/
編集:
文字列に他のものが含まれている場合、後読みを使用するとパフォーマンスが向上することに注意してください。
/(?i)supermario(?<!(?-i)SuperMario)/
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";
}