Tag Archives: 正規表現

ActionScript3で正規表現、のトラップ

0
Filed under AS3, Flash
Tagged as , ,

スコッ..

ガリガリ順調にコーディングしていたところを、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]

↓オライリーの正規表現本。これで勉強しよう!

詳説 正規表現 第3版

著者/訳者:Jeffrey E.F. Friedl

出版社:オライリージャパン( 2008-04-26 )

定価:

Amazon価格:¥ 5,184

大型本 ( 528 ページ )

ISBN-10 : 4873113598

ISBN-13 : 9784873113593


↓ミスリードをさせない文章の書き方は重要ですね。

伝えたいことが正しく伝わる文章のルール―間違い探しとポイント解説で基礎とスキルが楽しく身につく本―

著者/訳者:後藤武士

出版社:こう書房( 2009-06-02 )

定価:

Amazon価格:¥ 1,512

単行本(ソフトカバー) ( 216 ページ )

ISBN-10 : 476961005X

ISBN-13 : 9784769610052


↓デキる人の言い回しが気になる今日この頃なんです。

デキる人は「言い回し」が凄い (角川oneテーマ21)

著者/訳者:日本語力向上会議

出版社:角川学芸出版( 2010-02-10 )

定価:

Amazon価格:¥ 843

新書 ( 181 ページ )

ISBN-10 : 4047102253

ISBN-13 : 9784047102255