在java中获取html文件的一部分

时间:2013-01-31 14:21:47

标签: java html regex parsing

  

可能重复:
  RegEx match open tags except XHTML self-contained tags

我有一个HTML文件,如下所示:

<html>
  <head>
    <title>foobar</title>
  </head>
  <body>
    bla bla<br />
    {[CONTAINER]}
      Hello
    {[/CONTAINER]}
  </body>
</html>

如何从容器中获取其他html文件中的“Hello”?我几年前在PHP中做过这个,我记得一个REGEX-Function,它调用一个definde类函数,并将容器的内容作为参数。

有人可以告诉我如何用Java做到这一点吗?

3 个答案:

答案 0 :(得分:4)

您可以使用匹配{[CONTAINER]}{[/CONTAINER]}之间所有内容的正则表达式。例如:

// Non capturing open tag. Non-capturing mean it won't be included in result when we match it against some text.
String open = "(?<=\\{\\[CONTAINER\\]\\})"; 

// Content between open and close tag.
String inside = ".*?"; 

// Non capturing close tag.
String close = "(?=\\{\\[/CONTAINER\\]\\})";

// Final regex
String regex = open + inside + close;

String text = "<html>..."; // you string here

// Usage
Matcher matcher = Pattern.compile(regex, Pattern.DOTALL).matcher(text);
while (matcher.find()) {
    String content = matcher.group().trim();
    System.out.println(content);
}

但你必须小心。因为它仅适用于{[CONTAINER]}{[/CONTAINTER]}。不支持此自定义标记的属性。

您还必须意识到它不会以任何特定方式处理html标记。因此,如果您的CONTENT标记之间存在html标记,则会包含这些标记。

答案 1 :(得分:1)

您可以使用jsoup解析HTML,更多帮助here

更详细here

答案 2 :(得分:0)

为什么要使用Java? 您可以简单地将DOM API与Jav​​aScript一起使用:

document.getElementById("id_container").firstChild.data; // beware of \n char

或以效率较低的方式:

document.getElementById("id_container").innerHTML;

但是,如果您的文件正在服务器上构建,您也可以使用相同的API:

http://docs.oracle.com/javase/6/docs/api/org/w3c/dom/package-summary.html