GroovyのisCaseで正規表現がマッチしない?らしい

2019-07-26Groovy

GroovyのisCaseで正規表現がマッチしない? - No Programming, No Life

という投稿を見つけ、早速試してみる。ちょっとソースを修正して実行してみる。

def zipCode = "123-4567"
switch (zipCode) {
  case ~/d{3}-d{4}/:
    println "郵便番号"
    break
  default:
    println "他の何か"
    break
}
println zipCode.isCase(~/d{3}-d{4}/)

実行結果は

郵便番号
false

ほんとだ。isCaseが聞いてない。Groovyがバグっているのかな?

println zipCode.isCase(/d{3}-d{4}/) でも

println zipCode.isCase("\d{3}-\d{4}") でも

だめっぽい。

もうちょっと色々出力してみる。

println zipCode.isCase(java.util.regex.Pattern.compile(/d{3}-d{4}/))
println java.util.regex.Pattern.compile(/d{3}-d{4}/).isCase(zipCode)
println (~/d{3}-d{4}/).isCase(zipCode)
println( (~/d{3}-d{4}/).class.name)

結果はそれぞれ

false
true
d{3}-d{4}
java.util.regex.Pattern

ううーん。 なぜswitch文だとうまく判定してくれるんだ。

こりゃ時間を見つけてGroovy本体のソースにぶつかるしか。そのうちね、そのうち・・・。

2019-07-26Groovy