_正規表現を使う その1
- 2009-03-14(土)
- ActionScript,
- Flash

以前のエントリーで、正規表現を使う機会があったので、今回は自分の勉強をかねてエントリーします。
参考:akihiro kamijo: AS3 と正規表現
ActionScript3.0で、正規表現を作るには、以下の2通り用意されています。
参考:akihiro kamijo: AS3 と正規表現
ActionScript3.0で、正規表現を作るには、以下の2通り用意されています。
- 文字を/で囲む
- RegExp()コンストラクタをつくる
var pattern1:RegExp = /flash/;
var pattern2:RegExp = new RegExp("flash");
trace(pattern1.source); // flash が出力される
インスタンスの持つパターンは source 属性から参照ができ、値は参照のみが可能です。
次の正規表現/f.ash/は、fとaの間の1文字を伏せ字にしています。
"flash"や"ffasher"(こんな単語はないと思います。思い当たる単語が思いつきませんでした...)
/er$/は末尾が"er"で終わるパターンを示し、オプションで付いているiは大文字小文字の違いを無視するというフラグです。
"flasher"、"FLASHER"などが含まれます。
含まれていればtrue、含まれていなければfalseを返します。
test() を使うときに。 lastIndex 属性を使うとパターンマッチングを開始する文字を指定することができます。lastIndex を 2 にすると最初の2文字をスキップすることができます。ただし、このとき正規表現に g フラグを設定する必要があります。(使い方は省きます。)
"flash"や"ffasher"(こんな単語はないと思います。思い当たる単語が思いつきませんでした...)
var pattern3:RegExp = /f.ash/;
var pattern4:RegExp = new RegExp("f.ash");
次の正規表現/er$/iは、/er$/にオプションのiがついています。/er$/は末尾が"er"で終わるパターンを示し、オプションで付いているiは大文字小文字の違いを無視するというフラグです。
"flasher"、"FLASHER"などが含まれます。
var pattern5:RegExp = /er$/i;
var pattern6:RegExp = new RegExp("er$", "i");
test()
test()は、ストリングに正規表現が含まれているかどうか、チェックできます。含まれていればtrue、含まれていなければfalseを返します。
test() を使うときに。 lastIndex 属性を使うとパターンマッチングを開始する文字を指定することができます。lastIndex を 2 にすると最初の2文字をスキップすることができます。ただし、このとき正規表現に g フラグを設定する必要があります。(使い方は省きます。)
var pattern1:RegExp = /flash/; var text1:String = "this is flash" var text2:String = "this is actionscript" trace(pattern1.test(text1));//出力:true trace(pattern1.test(text2));//出力:false
exec()
今回のパターンは、()で囲んだ3つのグループがあります。パターンの中でグループを指定すると、グループにマッチした部分が配列の要素として入ります。\w+は1個以上の英数文字、\d{4}は4個の数字、.は1個の文字を示しています。(このあたりのことも、あとでエントリーしようと思います。)これらをハイフンでつないだものがマッチする全体のストリングです。
var pattern7:RegExp = /(/w+)-(/d{4})-(.)/;
var text:String = "no.25 blue-2001-gx";
var resultObj:Object = pattern7.exec(text);
if(resultObj != null) {
trace("input=" + resultObj.input);
trace("index=" + resultObj.index);
trace("-----");
trace("$&: " + resultObj[0]);//マッチした全体
trace("$1: " + resultObj[1]);//グループ1
trace("$2: " + resultObj[2]);//グループ2
trace("$3: " + resultObj[3]);//グループ3
}
input=no.25 blue-2001-gx index=6 ----- $&: blue-2001-g $1: blue $2: 2001 $3: g次は、応用としてファイル名から、拡張子をとった部分と、拡張子とを分けてとりだします。
\.は、区切りのピリオドを検索しています。
var file:String = "photo.jpg";
var pattern:RegExp = /(¥w+)¥.(¥w+)/;
var resultObj:Object = pattern.exec(file);
if(resultObj != null) {
var matchString:String = resultObj[0];
var filename:String = resultObj[1];
var suffix:String = resultObj[2];
trace(matchString);//photo.jpg
trace(filename);//photo
trace(suffix);//jpg
}
このエントリーをTwitterでつぶやく (投稿画面に飛びます)
- Newer: _バックスラッシュを表示させる
- Older: _参加します





