スコッ..
ガリガリ順調にコーディングしていたところを、ActionScript3 正規表現周りのヘルプのミスリードでスコッっと足下をすくわれたので、メモしておきます。
正規表現リテラルと正規表現クラス
“2009/03/01″という日付文字列をマッチさせたいと思って作った正規表現パターンはわかりやすくシンプルなモノだと “/\d\d\d\d/\d\d/\d\d”となるわけですが、これを例にしてみます。
まず、下記のコードは問題無く動作します。
1 2 3 4 | // 正規表現リテラルの使用例 var str:String = "2009/03/01"; var re0:RegExp = /\d\d\d\d\/\d\d\/\d\d/; trace( re0.test( str ) ); // true |
で、オンラインヘルプによると、正規表現リテラルと同じようにRegExpクラスのコンストラクタで設定できる、とのことなので、書きのようなコードに変えてみました。
1 2 3 4 | // RegExpクラスコンストラクタの使用例:失敗パターン var str:String = "2009/03/01"; var re0:RegExp = new RegExp("\d\d\d\d\/\d\d\/\d\d"); // ←ここを変えた. trace( re0.test( str ) ); // false |
すると、結果がfalseになってしまいます。
早速結論を言ってしまうと、当たり前ですが「RegExpのコンストラクタに渡すパターンは文字列リテラルなので、正規表現リテラルとは違うエスケープを施さないと行けない」ということです。
RegExpクラスを使う場合、上記例の正しい書き方は以下のようになります。
1 2 3 4 | // RegExpクラスコンストラクタの使用例:成功パターン var str:String = "2009/03/01"; var re0:RegExp = new RegExp("\\d\\d\\d\\d/\\d\\d/\\d\\d"); trace( re0.test( str ) ); // true |
違いは2箇所です。
- 正規表現の”\”を残すためにエスケープする。(”\”→”\\”)
- 正規表現区切りと同じ”/”につけていたエスケープははずす。(”\/”→”/”)
一度分かってしまえば簡単なんですが、気づかないでいきなりRegExpコンストラクタの方を使うと、私のようにはまります・・。
あの人も!
ちなみに、Flasherの間では有名なkamijo さんのblogエントリ「AS3 と正規表現 – akihiro kamijo」でも、同じ感じで意図通りに動作しないコード書かれています。はまりやすいんですね。

本当は、ここは”d+”と出力されます。
RegExp.source
AS3の正規表現クラス RegExpにはsourceというパラメータがあります。
これはそのクラスが持っているパターンを文字列で出力してくれるモノで、デバッグに便利です。
1 2 | var re0:RegExp = new RegExp("\\d\\d\\d\\d/\\d\\d/\\d\\d"); trace( re0.source ); // \d\d\d\d/\d\d/\d\d |
RegExpに文字列で渡したパターンが正しく正規表現パターンとなっているか不安になったら、このパラメータでチェックすると良さそうですね。
ズコッ..
と、ここまで書いて、アップする前に確認してみよう、と思い、最初のヘルプをよく読んでみたら最後の最後に、そういうことを書いていた箇所がありました!
また、new コンストラクタによる正規表現定義の中で、円記号(¥)から始まるメタシーケンス(任意の数字を意味する ¥d など)を使用する場合は、次のように円記号を二重に入力する必要があります。
今日の教訓:ヘルプは最後まで読みましょう。
[AD]
↓オライリーの正規表現本。これで勉強しよう!
著者/訳者:Jeffrey E.F. Friedl
出版社:オライリージャパン( 2008-04-26 )
定価:¥ 5,040
Amazon価格:¥ 5,040
大型本 ( 528 ページ )
ISBN-10 : 4873113598
ISBN-13 : 9784873113593
↓ミスリードをさせない文章の書き方は重要ですね。
伝えたいことが正しく伝わる文章のルール―間違い探しとポイント解説で基礎とスキルが楽しく身につく本―
著者/訳者:後藤武士
出版社:こう書房( 2009-06-02 )
定価:¥ 1,470
Amazon価格:¥ 1,470
単行本(ソフトカバー) ( 216 ページ )
ISBN-10 : 476961005X
ISBN-13 : 9784769610052
↓デキる人の言い回しが気になる今日この頃なんです。
著者/訳者:日本語力向上会議
出版社:角川学芸出版( 2010-02-10 )
定価:¥ 740
Amazon価格:¥ 740
新書 ( 181 ページ )
ISBN-10 : 4047102253
ISBN-13 : 9784047102255







