我正在尝试生成一个正则表达式,它将用适当的“ <img src="blah" alt="blah">
”代码替换 OrderedDictionary 的值。
因为它还输入了alt=""
表情符号的文本版本,所以它匹配了两次,把所有东西都炸了。
我目前的尝试如下。
foreach (string smiley in Smilies.Keys)
{
Regex re = new Regex("(?<!(=\"))" + Smilies[smiley] + "(?<!(\"))");
Trace.WriteLine(re.Replace(msg, @"«img src=""" + path + @"\images\" + Smilies[smiley] + @".gif"" alt=""" + smiley + @"""/»"));
}
笑脸在这里:
Smilies = new OrderedDictionary();
Smilies.Add(@"O:)", "angel");
Smilies.Add(@":-x", "cheekkiss");
Smilies.Add(@":\", "chin");
Smilies.Add(@"B)", "cool");
Smilies.Add(@":~", "crutches");
Smilies.Add(@"«3", "love");
Smilies.Add(@"»:(", "mad");
Smilies.Add(@"):«", "mad");
Smilies.Add(@":o", "ohmy");
Smilies.Add(@"@(", "ouch");
Smilies.Add(@":)", "smile");
Smilies.Add(@"^_^", "smug");
Smilies.Add(@"^.^", "smug");
Smilies.Add(@":+", "therethere");
Smilies.Add(@":P", "tongue_out");
编辑:
这目前在很大程度上是有效的。虽然我认为我将笑脸变成图像的方法是有缺陷的。
O:) => alt="O:)"
传递到目前为止提供的正则表达式,产生匹配并替换 like
alt="O:)" => alt="Oalt=":)""
。
也许我来错地方了?
foreach (string smiley in Smilies.Keys)
{
string s = Smilies[smiley].ToString();
string pattern = @"(?<!(=""))" + Regex.Escape(smiley) + @"(?<!(""))";
string rep = @"«img src=""" + path + @"\images\" + s + @".gif"" alt=""" + smiley + @"""/»";
Regex re = new Regex(pattern);
if (re.IsMatch(msg))
{
Trace.WriteLine("Got a match!");
string m2 = re.Replace(msg, rep);
msg = m2;
}
}