1

可能重复:
正则表达式匹配打开的标签,XHTML 自包含标签除外

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

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

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

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

4

3 回答 3

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 标签。因此,如果您的标签之间有 htmlCONTENT标签 - 它们将被包含在内。

于 2013-01-31T14:39:12.877 回答
1

您可以使用 jsoup 解析 HTML,这里有更多帮助

更详细的在这里

于 2013-01-31T14:24:40.647 回答
0

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

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

于 2013-01-31T14:34:33.840 回答