首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检测不完整HTML的正则表达式

问检测不完整HTML的正则表达式
EN

Stack Overflow用户
提问于 2010-09-24 17:43:36
回答 3查看 816关注 0票数 0

我正在尝试编写一个搜索并替换正则表达式,它将检测web请求返回的HTML是否完整。我遇到过服务器返回不完整的HTML (页面的一半)的情况,所以我希望在客户端检测到这一点,并再次请求页面。

我在想,正则表达式可以先查找<html[^>]*>的存在,然后再查找</html>的缺失。然后,替换部分将用一些特殊文本替换整个HTML。

我不能仅仅检查是否没有</html>,因为返回的数据可能是一个文本文件,并且我不能检查MIME类型。

有什么想法吗?我就是不能理解这背后所需要的样子。我并不是要解析HTML,只是搜索一些文本,这就是正则表达式的作用,对吧?

编辑:

正则表达式将由C#运行,但我在正则表达式编辑器中编写它们。我只能使用搜索和替换正则表达式来解决这个问题,没有其他方法。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-09-24 17:54:14

奥德是正确的。您不能使用regex解析HTML。当然,你也可以看到一些(多行)字符串是否包含后面不跟</html>的<html>。如果您确信您的web请求返回的内容将是一致的,并且在注释中不包含任何奇怪的东西(如html标记),那么

代码语言:javascript
复制
<html\b[^>]*>(?:(?!<\s*/\s*html).)*\Z

如果您设置了“点匹配换行符”选项,将会找到这样的字符串。如何做到这一点取决于您尚未提供的regex实现。

代码语言:javascript
复制
<html\b[^>]*>          # match <html> tag
(?:                    # match the following:
  (?!<\s*/\s*html)     # If it's impossible to match </html here
  .                    # then match any character
)*                     # zero or more times.
\Z                     # Then assert that we are indeed at the end of the string
票数 3
EN

Stack Overflow用户

发布于 2010-09-24 17:46:08

使用RegEx时,这是不可能的。超文本标记语言不是一种常规语言,因此RegEx无法验证不完整的页面。

为什么用RegEx解析超文本标记语言不是一个好主意,请参阅here。

使用适用于您的平台的验证HTML解析器加载HTML并检查验证错误。

在尝试检测文件是否是不完整的HTML之前,您需要弄清楚该文件是否是HTML。您可以使用文件扩展名(如果可用)来执行此操作,但是您没有提供有关您的环境的足够信息,因此无法提出任何建议。

很容易找到字符串中是否存在<html和</html>,如果不存在,则返回一个“特殊字符串”。普通的字符串函数应该就足够了--不需要RegEx。

票数 2
EN

Stack Overflow用户

发布于 2010-09-24 18:01:12

一般来说,正则表达式不适合用来描述超文本标记语言,因为正则表达式只能描述regular languages,而超文本标记语言不是正则语言。HTML允许以任意深度嵌套元素的事实使其变得不规则。

尽管有支持递归模式的正则表达式实现(例如,PCRE、.NET等),但它需要一个可怕的复杂正则表达式来描述每个有效的HTML代码。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3785861

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档