我试图在包含 HTML 标记的 HTML 字符串中将 > 字符的所有实例转换为其等效的 HTML 实体 >。我所能得到的最远的解决方案是使用正则表达式。
这是我到目前为止所拥有的:
public static readonly Regex HtmlAngleBracketNotPartOfTag = new Regex("(?:<[^>]*(?:>|$))(>)", RegexOptions.Compiled | RegexOptions.Singleline);
我遇到的主要问题是隔离不属于 HTML 标记的单个 > 字符。我不想转换任何现有标签,因为我需要保留 HTML 以进行渲染。如果我不转换 > 字符,我会得到格式错误的 HTML,这会导致浏览器出现渲染问题。
这是要解析的测试字符串的示例:
"Ok, now I've got the correct setting.<br/><br/>On 12/22/2008 3:45 PM, jproot@somedomain.com wrote:<br/><div class"quotedReply">> Ok, got it, hope the angle bracket quotes are there.<br/>><br/>> On 12/22/2008 3:45 PM, > sbartfast@somedomain.com wrote:<br/>>> Please someone, reply to this.<br/>>><br/>><br/></div>"
在上面的字符串中,作为 HTML 标记一部分的 > 字符都不应转换为 >。所以这:
<div class"quotedReply">>
应该变成这样:
<div class"quotedReply">>
另一个问题是上面的表达式使用了一个非捕获组,这很好,除了匹配在第 1 组中。我不太确定如何仅在第 1 组上进行替换并保留其余部分匹配。看起来 MatchEvaluator 并没有真正做到这一点,或者我现在无法想象它。
我怀疑我的正则表达式可以做一些爱。
有人有什么好主意吗?