0

我从 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。

4

0 回答 0