はまった
正規表現クラスRegExpで同時に扱えるグループ数は,多分32個まで.
マニュアルにはreplace関数で$99まで扱えるって書いてある.
が,自分の環境ではexec()は33番目以降処理してくれない.
【教訓】ゆとり正規表現は書かない.
以下検証用コード
package { import flash.display.Sprite; public class test extends Sprite { public function test() { var rex:String = ""; rex += "(a)|(b)|(c)|(d)|(e)|(f)|(g)|(h)|(i)|(j)|(k)|(l)|(m)"; rex += "|(n)|(o)|(p)|(q)|(r)|(s)|(t)|(u)|(v)|(w)|(x)|(y)|(z)"; rex += "|(A)|(B)|(C)|(D)|(E)|(F)|(G)|(H)|(I)|(J)|(K)|(L)|(M)"; rex += "|(N)|(O)|(P)|(Q)|(R)|(S)|(T)|(U)|(V)|(W)|(X)|(Y)|(Z)"; var re:RegExp = new RegExp(rex, "gms"); var str:String = "ABCDEFGHIJKLMN"; var o:Object; while (o=re.exec(str)) trace(o.length, o); } } } [output] 49 A,,,,,,,,,,,,,,,,,,,,,,,,,,,A,,,,,,,,,,,,,,,,,,,,, 49 B,,,,,,,,,,,,,,,,,,,,,,,,,,,,B,,,,,,,,,,,,,,,,,,,, 49 C,,,,,,,,,,,,,,,,,,,,,,,,,,,,,C,,,,,,,,,,,,,,,,,,, 49 D,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,D,,,,,,,,,,,,,,,,,, 49 E,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,E,,,,,,,,,,,,,,,,, 49 F,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,F,,,,,,,,,,,,,,,, 0 0 0 0 0 0 0 0