9

AS3 には、次のシグネチャを持つ文字列に対する関数があります。

function replace(pattern:*, repl:Object):String 

repl:Object は関数を指定することもできます。関数を指定すると、関数によって返された文字列が一致するコンテンツの代わりに挿入されます。

また、交換したい元の文字列を入手することは可能ですか?

(AS3では、元の文字列を取得できます

var input:String = arguments[2]; //in the callback function

)

Match元の文字列を含むクラスにプロパティが表示されません...

4

3 に答える 3

13
static void Main() {

    string s1 = Regex.Replace("abcdefghik", "e",
        match => "*I'm a callback*");

    string s2 = Regex.Replace("abcdefghik", "c", Callback);
}
static string Callback(Match match) {
    return "*and so am i*";
}

引数を介して一致したデータにアクセスできることに注意してください(特に、正規表現グループ( )などmatch.Valueにアクセスしたい場合を除く)。.Groups

于 2009-01-14T08:16:23.373 に答える
6

C# でこれを行うSystem.Text.RegularExpressions.Regex.Replace()には、コールバックを受け取る which を使用します。

于 2009-01-14T08:12:46.220 に答える
5

既存の回答を完全に具体化し、ラムダ式がどのように便利かを示す例として:

using System;
using System.Text.RegularExpressions;

class Test
{
    static void Main()
    {
        var template = "On $today$ you need to do something.";
        var regex = new Regex(@"\$today\$");
        var text = regex.Replace(template,
            match => DateTime.Now.ToString("d"));
        Console.WriteLine(text);
    }
}

(私がこれを書いている間にマークの答えが現れましたが、誰かがそれが冗長だと思わない限り、完全な例として残しておきます。提案された場合は喜んで削除します。)

于 2009-01-14T08:17:57.740 に答える