はまった


正規表現クラス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