我对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.
因为它先抓住了:( .
我该如何解决这个问题?
发布于 2014-01-18 17:25:24
有两件事:
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;
}
}ideone演示
当你交换愤怒和悲伤的笑脸时,在应该有前瞻性的地方使用消极的眼神是导致regex失败的原因,因为笑脸字符根本没有使用"。
https://stackoverflow.com/questions/21207011
复制相似问题