1

次の形式で約1200語を含むファイルを読んでいます。

words:a:/ zenb:/ fixx:/ wew:/ sina:/ benb:/ sixx:/ hew:/ bin

そのテキストファイルにキーワードがいくつあるかを見つける必要があります。つまり、キーワードは次のとおりです。

禅の修正私たちは罪を犯します

今、私は次のようにRegExpでそれを実行しようとしています。

var s:String = "words:b:sa:/zenb:/fixx:/wew:/sina:/benb:/sixx:/hew:/bin";
var pattern:RegExp = /:/+/g;
var results:Array = s.match(pattern);
trace(results.length); 

エラーが発生します。私は初心者なので、この正規表現がどのように機能するかを本当に理解していません。同じ結果を得る別の方法はありますか?

ありがとう

4

2 に答える 2

2

構文var pattern:RegExp = /:/+/g;エラーがあります。バックスラッシュをスキップして、\これを次のように変更します。

var pattern:RegExp = /:\/+/g;

または、動作するはずです。あるいは、この形式では、文字列分割メソッドを使用して、合計単語数を取得できます。これを試して:

var s:String = "words:b:sa:/zenb:/fixx:/wew:/sina:/benb:/sixx:/hew:/bin";
var wordCount:Number = s.split(":/").length -1;
trace( wordCount );

それがうまくいくことを願っています。

于 2012-12-22T00:00:14.047 に答える
0
package
{
    import flash.display.Sprite;

    public class CountWordsExample extends Sprite
    {
        public function CountWordsExample()
        {
            super();
            // 8 7 0
            trace(countWords(
                "words:b:sa:/zenb:/fixx:/wew:/sina:/benb:/sixx:/hew:/bin",
                ":/"),
                countWords(
                    "words:b:sa:/:/fixx:/wew:/sina:/benb:/sixx:/hew:/bin",
                    ":/"),
                countWords(
                    "words:b:sa::zenb::fixx::wew::sina::benb::sixx::hew::bin",
                    ":/"));
        }

        public static function countWords(words:String, delimiter:String, 
                                          countBlanks:Boolean = false):uint
        {
            var result:uint;
            var wordPointer:int = -1;
            var delimiterPointer:int;
            var delimiterLength:uint = delimiter.length;

            if (words.length >= delimiterLength)
            {
                do
                {
                    delimiterPointer = wordPointer;
                    wordPointer = words.indexOf(
                        delimiter, wordPointer + delimiterLength);
                    if (countBlanks || 
                        // we moved by more characters, then the length of
                        // delimiter
                        wordPointer - delimiterLength > delimiterPointer) 
                        result++;
                }
                while (wordPointer > -1)
            }
            return result;
        }
    }
}

これは、元の文字列の追加の配列やサブ文字列を作成せずに単語をカウントする方法の例です。また、カウントされた単語が少なくとも1文字の長さであることを確認します。

于 2012-12-22T08:37:50.053 に答える