【发布时间】:2010-09-12 23:12:56
【问题描述】:
换句话说,可以使用/<tag[^>]*>.*?<\/tag>/ 正则表达式来匹配不包含嵌套tag 元素的tag html 元素吗?
例如(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 说:
属性值是文本的混合 和字符引用,除了 附加限制 文本不能包含歧义 和号。
【问题讨论】:
-
这是大家用来解释为什么不应该使用正则表达式解析HTML的教科书示例,而应该使用HTML Parser。