1

メール内の未使用の差し込みフィールドを見つけて、パーサーでサポートされていないフィールドをスローしようとしています。形式は [MERGEFIELD] です。括弧内はすべて大文字。

次に、サポートされていない最初の差し込み項目の値をテキストにスローします。

            if (Regex.IsMatch(email.Body, @"\[[A-Z]+\]"))
        {
            var regexobj = new Regex(@"\[[A-Z]+\]");
            var regexBody = regexobj.Match(email.Body).Groups[1].Value;
            throw new NotImplementedException("Unsupported Merge Field:"+ regexBody );
        }

現在、例外が発生していますが、「サポートされていない結合フィールド:」というメッセージしかありません。

4

2 に答える 2

2

式に存在しない (キャプチャ) グループ 1 (括弧内の一致したコンテンツ) の値を取得しようとしています。

代わりに、次のような式を使用したい場合があります。

\[([A-Z]+)\]
于 2012-06-07T20:59:46.630 に答える
0

キャプチャするには括弧を使用する必要があります。

http://www.regular-expressions.info/refadv.html

http://msdn.microsoft.com/en-us/library/az24scfc.aspxも参照してください。

(?< name > subexpression) の形式の名前付きキャプチャ グループを使用すると、インデックスではなく名前でキャプチャにアクセスできるようになります。

以下のようなもの(ハンドコード)

    if (Regex.IsMatch(email.Body, @"\[[A-Z]+\]"))
    {
        var regexobj = new Regex(@"(?<unsupportedField>\[[A-Z]+\])");
       foreach(Match match in regexobj.Matches(email.Body))
       {
           string unsupported = match.Groups["unsupportedField"].Value
           //aggregate these then throw
       }
        throw new NotImplementedException("Unsupported Merge Field:"+ regexBody );
    }
于 2012-06-07T20:59:36.287 に答える