jsr-03の正規表現の挙動が変わっている
http://jira.codehaus.org/browse/GROOVY-1000
groovy> println org.codehaus.groovy.runtime.InvokerHelper.getVersion() groovy> m = "123" =~ /(.)/ groovy> println m[1] groovy> go 1.0-jsr-02 1
groovy> println org.codehaus.groovy.runtime.InvokerHelper.getVersion() groovy> m = "123" =~ /(.)/ groovy> println m[1] groovy> go 1.0-jsr-03 [2, 2] groovy> m = m[0] // jsr-03 over groovy> println m[1] groovy> go 1
たしかに
pattern = /(?:ab([c|d]))/ matcher = "abcabd" =~ pattern; while (matcher.find()) { println(matcher[1]); }
が jsr-02だと無限ループしちゃうのはわかるけど改悪だと思うな。
というかやっぱり perl の $ が必要でしょう。かきかえるかな?
なんかほかにもありそうで怖いな。