我在这里找到RegEx http://regexadvice.com/forums/thread/36397.aspx,我正在寻找一个我不明白的行为的解释。 RegEx应该找到不在脚本或样式标签内的多行HTML注释。我正在使用它来构建一个可以在构建后去除浏览器可访问评论的应用程序。例如,发现这个了解RegEx,查找多行HTML注释
<!-- I am an ordinary comment
and I need two lines -->
但不是这个
<script language="javascript1.2">
<!--
function window_Onload()
{
alert('I am the on load event');
}
window.onload=window_Onload;
//-->
</script>
一旦发现,我能而忽略了第二删除第一条注释块。
以下模式工作绝对精美实现以上:
string multilinePattern = @"<!--((?!-->).)+-->(?>((?!</?(script|style)).)*)(?!</(script|style))";
match = Regex.Match(text, multilinePattern);
if (match.Success)
{
output.WriteLine("{0}", match.Value);
}
此代码会给我一个文件,所有的HTML注释并不是脚本或样式标签内,但它确实别的东西我不不会的。
这里的例1 HTML的和返回:
HTML:
<!-- Outside Table -->
<table summary="<%= GetLocalResourceObject("LayoutTable.SummaryText") %>" cellspacing="0" cellpadding="0" border="0" width="650" align="center">
<tr>
<td class="tableHeader"> </td>
返回:
<!-- Outside Table -->
现在,这里的例2 HTML和返回的:
HTML:
<!-- Outside Table -->
<table summary="<%= GetLocalResourceObject("LayoutTable.SummaryText") %>" class="tabTableCell" cellpadding="0" cellspacing="0" width="750" align="center" >
<tr>
<td class="tableHeader"> </td>
返回:
<!-- Outside Table -->
<table summary="<%= GetLocalResourceObject("LayoutTable.SummaryText") %>" class="tabTableCell" cellpadding="0" cellspacing="0" width="750" align="center" >
<tr>
例2是错误的:我不想包括该块HTML在比赛结果中。但是我可以在示例1和2之间看到的唯一区别是示例2中的“外部表”符号之后的额外换行符。
所以我的问题是,它在正则表达式中是如何导致匹配包含html一直到示例2中的TR标签。我需要更改哪些内容才能使示例2与示例1中的示例1相同?这里
这将为我返回正确的结果。另外:你真的不应该使用正则表达式来解析HTML。事实上,你问这个问题,并有问题匹配标记是你不应该这样做的确切原因。 –
关于正则表达式和HTML有几十个问题,他们都说,不要做!改用HTMLAgilityPack。 – paqogomez
@CasimiretHippolyte,有些方法可能会标记您可能认为不具有建设性的评论,而不是诉诸广告主题攻击。我试图有所帮助,我认为HTML敏捷软件包是去这里的方法。 – paqogomez