<td valign="top" width="230">
<div>
<b><a href="http://www.cs.cornell.edu/johannes/">Johannes Gehrke</a></b>
</div>
<div class="small">
Professor<br>Computer Science, CS Field Member<br>Director of Graduate Studies<br>
Ph.D., Univ of Wisconsin, Madison, 1999<br><b>Research focus:</b> Database systems, data mining, and data privacy
</div>
</td>
我想从给定的html字符串中获取标记序列。最简单的方法是什么?例如,将上面的html字符串作为输入,我希望我的方法输出一个字符串数组,即[td,div,b,a,div,br,br,br,br,b]
。
我已经尝试Jsoup
来解析html字符串,但似乎无法捕获像br
这样的标记。我想知道任何其他Java库可以为我做这个技巧。最后的手段是使用正则表达式技术。如果某人能够为此目的提出一个简洁的正则表达式,它也会这样做。
答案 0 :(得分:2)
您可以使用正则表达式:
Pattern p = Pattern.compile("<([^\\s>/]+)");
Matcher m = p.matcher(txt);
while(m.find()) {
String tag = m.group(1);
System.out.println(tag);
}
答案 1 :(得分:0)
使用JSoup解析字符串后,使用其getAllElements()方法,迭代结果,并为每个元素调用tagName()。
答案 2 :(得分:0)
我会考虑使用HTMLEditorKit.Parser
。尽管Swing只能呈现HTML 3.2,但解析器应该读取并保留所有标记:
public List<String> getTags(Reader reader)
throws IOException {
final List<String> tags = new ArrayList<>();
HTMLEditorKit.ParserCallback callback =
new HTMLEditorKit.ParserCallback() {
@Override
public void handleStartTag(HTML.Tag tag,
MutableAttributeSet attributes,
int pos) {
super.handleStartTag(tag, attributes, pos);
tags.add(tag.toString());
}
};
HTMLEditorKit.Parser parser = new ParserDelegator();
parser.parse(reader, callback, true);
return tags;
}