Groovyのパターンマッチングに関する記事(2010-05-20)の訂正とお詫び
「正規表現パターンマッチングのPerlとGroovyでの挙動が異なる」に関する補足
2010-05-20の記事へのuehajさんのコメントを読んでいただくと分かると思いますが、以下の方法で正しく動くようです。
def text = 'apple banana cherry' if (text =~ /banana/) { println "YES" } else { println "NO" }
ただし、「!~」は、コンパイルエラーが出て使えないため、Perlと全く同じように書けるわけではないようです。
(text !~ /.../ は、 text ! ~/.../ と解釈され、!演算子が正しくない位置にあると解釈されるため?)
「Groovyで文字列の中に半角英数記号以外の文字があるかを検出する正規表現パターンマッチング」の訂正とお詫び
以下の部分に誤りがありました。
if (text !=~ /.*[ -~]+.*/) { println "半角英数記号以外が含まれている" } else { println "半角英数記号のみ" }
この場合、text != ~/.*[ -~]+.*/ となり、必ず真になるため、マッチングに使えません。
記事に誤りがあった事をお詫びします。
さらに、==~演算子を使うほうのソースも、上で説明している通り、=~演算子を使う方法で書くことができ、その場合、左右の.*は不要となります。(.matchesを使った場合は.*が必要)