html - ">"(U+003E GREATER-THAN SIGN) 是否允许在 html 元素属性值内?

标签 html regex syntax

换句话说,可以使用 /<tag[^>]*>.*?<\/tag>/匹配 tag 的正则表达式不包含嵌套的 html 元素 tag元素?

例如(lt.html):

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
  <head>
    <title>greater than sign in attribute value</title>
  </head>
  <body>
    <div>1</div>
    <div title=">">2</div>
  </body>
</html>

正则表达式:

$ perl -nE"say $1 if m~<div[^>]*>(.*?)</div>~" lt.html

和屏幕抓取:

#!/usr/bin/env python
import sys
import BeautifulSoup

soup = BeautifulSoup.BeautifulSoup(sys.stdin)
for div in soup.findAll('div'):
    print div.string


$ python lt.py <lt.html

两者都给出相同的输出:

1
">2

预期输出:

1
2

w3c说:

Attribute values are a mixture of text and character references, except with the additional restriction that the text cannot contain an ambiguous ampersand.

最佳答案

是的,它是允许的(W3C Validator 接受它,只发出警告)。

未转义 <>也允许在注释中使用,因此可以欺骗这种简单的正则表达式。

如果 BeautifulSoup 没有处理这个问题,它可能是一个错误,或者可能是一个有意识的设计决定,使其更能适应属性中丢失的右引号。

关于html - ">"(U+003E GREATER-THAN SIGN) 是否允许在 html 元素属性值内?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/94528/

相关文章:

html - 菜单悬停在 IE 中不起作用

java - 将包含无效字符的 XML 标签与正则表达式进行匹配

Python正则表达式替换字符串

java - 解析路径以获取所需名称

syntax - 句号在 Fortran 的这一行中起什么作用?

javascript - 检查所有复选框是否具有相同的值

html - 导航栏上的事件类无法正常工作

html - Flexbox 容器比其内容物稍高

function - 需要来自更高层级的文件

php - 在 sudo 模式下运行 emacs 时保留用户的配置