【发布时间】:2017-02-28 21:15:53
【问题描述】:
我有一个 Html 字符串,我想删除 if 和 endif 标记以及它们之间的所有内容。
<![if ..]><style>...</style><![endif]>
我尝试了以下正则表达式:
<![if.*[endif]>
<!\\[if.*\\[endif\\]>
上面的正则表达式是否缺少一些特殊的方括号?
【问题讨论】:
我有一个 Html 字符串,我想删除 if 和 endif 标记以及它们之间的所有内容。
<![if ..]><style>...</style><![endif]>
我尝试了以下正则表达式:
<![if.*[endif]>
<!\\[if.*\\[endif\\]>
上面的正则表达式是否缺少一些特殊的方括号?
【问题讨论】:
我认为你是对的。
输入:
<![if IE]>IE<br /><![endif]>
<![if IE 6]>IE 6<br /><![endif]>
图案:
<!\\[if.*\\[endif\\]>
匹配 2 个计数。
但我认为你的实际情况是“if”和“endif”在不同的行。所以你必须使用 Singleline 选项来使 Dot(.) 包含新行。
输入:
<![if IE]>
IE<br />
<![endif]>
<![if IE 6]>
IE 6<br />
<![endif]>
模式(带单行选项):
<!\\[if.*\\[endif\\]>
匹配 1 个计数。
它匹配,但只有 1 个计数匹配所有字符串。因为 Dot(.) 搜索所有以 "[endif]>" 结尾的字符串,而不会在第一个 "[endif]>" 字符串处停止。
所以你必须使用 ?停在第一场比赛。
输入:
<![if IE]>
IE<br />
<![endif]>
<![if IE 6]>
IE 6<br />
<![endif]>
模式(带单行选项):
<!\\[if.*?\\[endif\\]>
匹配 2 个计数。
此外,我认为您显示了条件 cmets 的错误用法。
这个
<![if ..]><style>...</style><![endif]>
应该改为
<!--[if ..]><style>...</style><![endif]-->
【讨论】:
html = Regex.Replace(html,@"(?is)<!\[if.*?\]>.*?<!\[endif\]>","");
【讨论】: