正規表現パターンマッチングのPerlとGroovyでの書き方の違い(2010-5-20の修正・補足版)

キーワードが含まれているかを判定

Perl(=~を使った場合)
my $text = "apple banana cherry";
print ($text =~ /banana/ ? "yes\n" : "no\n");
Perl(!~と!/.../を使った二重否定)
my $text = "apple banana cherry";
print ($text !~ !/banana/ ? "yes\n" : "no\n");
Groovy(=~を使った場合)
def text = "apple banana cherry"
println (text =~ /banana/ ? "yes" : "no")
Groovy(==~を使った場合)
def text = "apple banana cherry"
println (text ==~ /.*banana.*/ ? "yes" : "no")
Groovy(matchesを使った場合)
def text = "apple banana cherry"
println (text.matches(/.*banana.*/) ? "yes" : "no")

キーワードが含まれていないかを判定

Perl(!~を使った場合)
my $text = "apple banana cherry";
print ($text !~ /banana/ ? "yes\n" : "no\n");
Perl(=~と!/.../を使った場合)
my $text = "apple banana cherry";
print ($text =~ !/banana/ ? "yes\n" : "no\n");
Groovy(=~と!/.../を使った場合)
def text = "apple banana cherry"
println (text =~ !/banana/ ? "yes" : "no")
Groovy(==~と!/.../を使った場合)
def text = "apple banana cherry"
println (text ==~ !/.*banana.*/ ? "yes" : "no")
Groovy(matchesの結果を!で否定する場合)

matchesで!/.../を使うとコンパイルエラーになるため、結果を!で反転する。

def text = "apple banana cherry"
println (!text.matches(/.*banana.*/) ? "yes" : "no")