RegEx过滤一些特定标签

时间:2015-09-18 18:51:03

标签: html regex asp-classic

我正在开发一个ASP代码,它读取外部网站并通过HTMLDocument接口Object(“HTMLFILE”对象)解析它,以通过DOM结构导航内容。但有一些页面会引发错误:

  

'htmlfile error 80070057无效的参数。'

经过大量的研究后,我发现有一些HTML标签,我不知道为什么,HTMLFILE对象没有正确呈现或管理这些标签给我这个错误。

因为ASP太旧而且今天没有太多内容可用于探测,我确信在发送到HTMLFILE对象之前我必须解析它,我想通过RegEx做的最好的方法

但我面临一些问题(因为我没有太多练习)。

我必须成功找到“HTMLFILE”不接受的HTML标记块才能删除它们。

例如:

<head>
<script> .......  </script>
<style> ....... </style>
</head>
<body>
<iframe> ........ </iframe>
<div> ..... </div>
<table>.....</table>

我必须匹配完整的脚本块,样式和iframe,保留文档的其余部分。

从最近几天开始我做了一些研究并且差不多完成了它:

<(?:script|embed|object|frameset|frame|iframe|meta|style).+(.|\s)*?>$

我尝试匹配单行标记(例如'&lt; BR&gt;')但我现在完全感到困惑,并且存在一些不一致之处,例如,关闭某些标记的某些行未正确选择

我知道最好的方法是发现为什么HTMLFILE会让我犯错误,但没有更多关于错误的信息来调试它。

感谢所有的时间和耐心。

2 个答案:

答案 0 :(得分:1)

这是正则表达式的候选人:

<(script|meta|style|embed|object|frameset|frame|iframe)[\s\S]*?<\/(script|meta|style|embed|object|frameset|frame|iframe)>
带有解释的

DEMO

修改
使用[\s\S]*?

的延迟匹配进行更新

答案 1 :(得分:0)

正则表达式不是最好的工具,take a look here,但如果你真的想要,我认为在简单的情况下你也可以为所有标签使用一个正则表达式,也是嵌套的:

(?=(<([^>]+)>([\s\S]*?)<\/\2>))

DEMO

第1组显示整个捕获部分,第2组捕获标记,第3组捕获标记内容。它实际上不匹配文本,只捕获一些片段。但是,您可能可以获得匹配的开始/结束索引,并根据需要使用。

我仍然认为你应该重新考虑使用正则表达式,但上面使用的suntex非常有用,所以值得知道如何使用它。