我从 MSSQL CLR 调用了以下函数:
private static string ReplaceTags(string input, string TagsReplacementXML)
{
const string TagNamePattern = @"<\$\w+>";
const string ReplacementPattern = @"<\${0}\>";
XDocument doc = XDocument.Parse(TagsReplacementXML);
var xmltags = doc.Descendants("Tag").Select(x => new KeyValuePair<string,string>(x.Attribute("TagName").Value,x.Attribute("TagValue").Value));
Regex rx = new Regex(TagNamePattern);
MatchCollection matches;
matches = rx.Matches(input);
foreach (Match m in matches)
{
KeyValuePair<string, string> tagValues = xmltags.FirstOrDefault(x => string.Format("<${0}>", x.Key) == m.Value);
if (tagValues.Key != null && tagValues.Value != null)
{
input = Regex.Replace(input, string.Format(ReplacementPattern, tagValues.Key), tagValues.Value);
}
}
return input;
}
我正在通过
<$Content>
和类似的东西
<Root>
<Tag TagName="Content" TagValue="<some (escaped) HTML with>$0.26</some (escaped) HTML>"/>
</Root>
正则表达式将 替换为<$Content>
TagValue 中的内容,但随后它返回并将 $0 替换为<$Content>
,因此所有小于一美元的价格都显示为 <$Content>.26
首先,我试图理解为什么它会这样做。我对正则表达式有点熟悉,但我不知道有什么会导致它。第二件事是我能做些什么来解决它。我考虑过<span/>
在 $ 和 0 之间插入一个,这样它们就不会在一起了,但这很 hacky。