【问题标题】:Get a part of a html file in java [duplicate]在java中获取html文件的一部分[重复]
【发布时间】:2013-01-31 14:21:47
【问题描述】:

可能重复:
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 函数,它调用一个定义类函数并将容器的内容作为参数提供。

谁能告诉我如何在 Java 中做到这一点?

【问题讨论】:

  • @user2029057:您能说明我们可以对您的文本做出什么假设吗?
  • HTML 在尝试使用 RegEx 时会遇到很多问题。规范的帖子是 [一个众所周知的 StackOverflow 帖子] (stackoverflow.com/questions/1732348/…),例如处理标签属性。 @Nikita 的回答很好地涵盖了它。 OP 可以免费使用正则表达式,但要小心许多边缘情况。

标签: java html regex parsing


【解决方案1】:

您可以使用匹配{[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 用于实际回答问题,而不是跳上 “不要使用正则表达式解析 html” 潮流。
  • 另一件事是它不关心它们之间是否有任何HTML标记,如果有的话。
  • 感谢所有写信的人!那是:)
  • 你只需要每写两次 \ 就可以了!
【解决方案2】:

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

更详细的here

【讨论】:

  • 他不是要求解析 HTML,而是要求从 2 个非常具体的标签之间获取一些文本。
  • 当然更新更详细的链接
  • 你还在谈论 HTML 解析,那里。
【解决方案3】:

为什么要使用 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

【讨论】:

  • 他不是要求解析 HTML,而是要求从 2 个非常具体的标签之间获取一些文本。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-18
  • 1970-01-01
  • 1970-01-01
  • 2013-04-18
  • 2011-04-04
  • 2012-06-10
相关资源
最近更新 更多