電子書籍の厳選無料作品が豊富!

Flash Pro CS5
AS3.0
で記述しています。

しかし今回は正規表現に関しての質問ですので、AS3に限らず教えていただけるとありがたいです。



例として次のような2つの文章があります。
<font color="#cc0033">Laid off</font> a lot of workers.
They <font color="#cc0033">laid</font> us <font color="#cc0033">off</font> for a month.


ここから<font>タグで囲まれた中身の部分だけ抜き出し,変数に入れたいと考えています。
つまり,

1つ目の文章の場合,”Laid off”の部分

2つ目の文章の場合,”laid”と”off”の部分

となります。

2つ目の文章に関しては,できればひとつの変数に”laid,off”というように文字列が入ると嬉しいです。
(変数1に”laid”,変数2に”off” または 配列に順番に格納 よりも)



.replace(/">.*?<\/font>/g, "hoge");
のように書き換える方法はわかったのですが,囲まれた中身を抜き出す方法がわかりませんでした。

よろしくお願いいたします。

A 回答 (3件)

次の2つのうちどちらかでできると思います。


2つの違いは,最初のデータをどのように用意するかの違いです。


----------------------------------------------------------
//とりあえず文字列を 変数str1 と str2 に分けて用意する(?)
var str1:String='<font color="#cc0033">Laid off</font> a lot of workers.';
var str2:String='They <font color="#cc0033">laid</font> us <font color="#cc0033">off</font> for a month.';

//関数getStrの定義(引数s:文字列)
function getStr(s:String):void {
//
//引数 sを 「</font>」で区切った配列1を作成する
var arr1:Array=s.split('</font>');
//
//配列2を作成する
var arr2:Array = new Array();
//
//配列 arr1 の要素数-1 ループさせる
for (var i:int = 0; i < arr1.length-1; i++) {
//配列arr1の各要素を「>」で区切った配列3を作成する
var arr3:Array=arr1[i].split(">");
//配列3の最後の要素をつなげた配列2にする
arr2.push(arr3[arr3.length-1]);
}
//
//arr2を出力させてみる
trace(arr2);
}

//関数getStrを実行(引数str1)
getStr(str1);
//関数getStrを実行(引数str1)
getStr(str2);
----------------------------------------------------------



----------------------------------------------
//とりあえず分けない文字列全文を用意する(?)
var str:String='<font color="#cc0033">Laid off</font> a lot of workers.They <font color="#cc0033">laid</font> us <font color="#cc0033">off</font> for a month.';

//strを「.」で区切った配列arrを作成
var arr:Array=str.split('.');

//arrの要素数分ループ
for (var i:int = 0; i<arr.length; i++) {
//関数getStrを実行(引数arr[i])
getStr(arr[i]);
}

//関数getStrの定義(引数s:文字列)
function getStr(s:String):void {
//
//引数 sを 「</font>」で区切った配列1を作成する
var arr1:Array=s.split('</font>');
//
//配列2を作成する
var arr2:Array = new Array();
//
//配列 arr1 の要素数-1 ループさせる
for (var i:int = 0; i < arr1.length-1; i++) {
//配列arr1の各要素を「>」で区切った配列3を作成する
var arr3:Array=arr1[i].split(">");
//配列3の最後の要素をつなげた配列2にする
arr2.push(arr3[arr3.length-1]);
}
//
//arr2を出力させてみる
trace(arr2);
}
----------------------------------------------
    • good
    • 0
この回答へのお礼

毎回素早いご回答ありがとうございます。
応用が効くプログラムをありがとうございました。
無事完成させる事ができました。

もっと勉強して色々使いこなせるようになりたいです。
ありがとうございました。

お礼日時:2011/06/04 10:07

以下の構文で出来そうです。

(一応確認しました)
//-----------------------------------------------------
var Patt1:RegExp = /<\/font>.*<font [^>]*>/g;
var Patt2:RegExp = /^.*<font [^>]*>/;
var Patt3:RegExp = /<\/font>.*$/;
var str1:String = "文字列";
str1=str1.replace(Patt1, ",");
str1=str1.replace(Patt2, "");
str1=str1.replace(Patt3, "");
//-------------------------------------------------------
注意:文字列の中に<font ・・・>・・・</font>が無い時はstr1の値は変化しません。
   <font ・・・>・・・</font>が対が正しときも正常には動きません
正規表現の説明
 Patt1はすべての/<\/font>.*<font [^>]*>/を”,”に置換
   つまり</font>・・・<font ・・・>を”,”に置換
     <\/font> -> </font>
     .* -> 任意の文字を任意個
     <font [^>]*> -> <font ・・・>
         [^>]*は”>”以外の文字を任意個(これで最初の”>”範囲になります)
 Patt2は /^.*<font [^>]*>/を削除(Patt1があるのでgは不要)
   つまり・・・<font ・・・>を削除
     ^.*は文字列の最初から任意文字任意個
 Patt3は /<\/font>.*$/を削除(Patt1があるのでgは不要)
   つまり</font>・・・を削除
     .*$は任意文字任意個で最後まで

"[^>]*"のところで迷ってしまいました。
最初に<font .*>でTESTしてうまく動きませんでした。
    • good
    • 0
この回答へのお礼

なるほど!
とてもシンプルでわかりやすいです。
大変勉強になりました。

どちらの回答者様をベストアンサーにするかとても迷いましたが
投稿時間の早さで決めさせていただきました。

ありがとうございました。

お礼日時:2011/06/04 10:10

秀丸の、置換やマクロではいかがでしょうか?

この回答への補足

文章はすでに決まったXMLから取得し,変数内に入れてあるものなので,
正規表現などによりプログラム内で書き換えたいと考えています。

補足日時:2011/05/30 19:42
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!