我正在开发一个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会让我犯错误,但没有更多关于错误的信息来调试它。
感谢所有的时间和耐心。
答案 0 :(得分:1)
这是正则表达式的候选人:
<(script|meta|style|embed|object|frameset|frame|iframe)[\s\S]*?<\/(script|meta|style|embed|object|frameset|frame|iframe)>
带有解释的
修改强>
使用[\s\S]*?
答案 1 :(得分:0)
正则表达式不是最好的工具,take a look here,但如果你真的想要,我认为在简单的情况下你也可以为所有标签使用一个正则表达式,也是嵌套的:
(?=(<([^>]+)>([\s\S]*?)<\/\2>))
第1组显示整个捕获部分,第2组捕获标记,第3组捕获标记内容。它实际上不匹配文本,只捕获一些片段。但是,您可能可以获得匹配的开始/结束索引,并根据需要使用。
我仍然认为你应该重新考虑使用正则表达式,但上面使用的suntex非常有用,所以值得知道如何使用它。