GroovyのisCaseで正規表現がマッチしない? - No Programming, No Life
という投稿を見つけ、早速試してみる。ちょっとソースを修正して実行してみる。
1
2
3
4
5
6
7
8
9
10
| def zipCode = "123-4567"
switch (zipCode) {
case ~/d{3}-d{4}/:
println "郵便番号"
break
default:
println "他の何か"
break
}
println zipCode.isCase(~/d{3}-d{4}/)
|
実行結果は
ほんとだ。isCaseが聞いてない。Groovyがバグっているのかな?
println zipCode.isCase(/d{3}-d{4}/) でも
println zipCode.isCase("\d{3}-\d{4}") でも
だめっぽい。
もうちょっと色々出力してみる。
1
2
3
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)
|
結果はそれぞれ
1
2
3
4
| false
true
d{3}-d{4}
java.util.regex.Pattern
|
ううーん。 なぜswitch文だとうまく判定してくれるんだ。
こりゃ時間を見つけてGroovy本体のソースにぶつかるしか。そのうちね、そのうち・・・。