2

と に問題がorderedDictionaryありRegexます。テキストで問題を定義する方法はありますが、説明しようと思います...

これは私のコードです:

var smilies = new OrderedDictionary
{
    {@":(", "smile_sadx24"},
    {@">:(", "smile_angryx24"},
};

foreach (string smiley in smilies.Keys)
{
    var re = new Regex(@"(?<!(=""))" + Regex.Escape(smiley) + @"(?<!(""))");
    if (re.IsMatch(incomingtext))
    {
        string m2 = re.Replace(incomingtext, "<img src=\"/Content/themes/mavi/img/custom/smiles/" + smilies[smiley] + ".png\"  alt=\"" + smiley + "\"/>");
        incomingtext = m2;
    }
}

処理しようとすると>:(、返されsmile_sadx24ませんでしたsmile_angryx24...

最初にキャッチするので:(...

どうすればこの問題を解決できますか?

4

1 に答える 1

1

2つのこと:

var smilies = new OrderedDictionary
{
    {@">:(", "smile_angryx24"},  // Put this one first
    {@":(", "smile_sadx24"},
};

foreach (string smiley in smilies.Keys)
{
    var re = new Regex(@"(?<!(=""))" + Regex.Escape(smiley) + @"(?!(""))"); 
                       // Second should be a negative lookahead  ^^
    if (re.IsMatch(incomingtext))
    {
        string m2 = re.Replace(incomingtext, "<img src=\"/Content/themes/mavi/img/custom/smiles/" + smilies[smiley] + ".png\"  alt=\"" + smiley + "\"/>");
        incomingtext = m2;
    }
}

イデオンデモ

スマイリー文字がまったく使用されていないため、怒っているスマイリーと悲しいスマイリーを交換したときに正規表現が失敗する原因となったのは、先読みがあるはずの場所で否定的な後ろ向き"を使用したことです。

于 2014-01-18T17:25:24.267 に答える