【问题标题】:Extract data between HTML tags提取 HTML 标签之间的数据
【发布时间】:2015-09-26 21:37:45
【问题描述】:

我的 HTML 页面如下所示:

<htm>

<section class="posts">

      <script type="application/ld+json">
        {
          "url": "http://schema.org",
          "title": "some Title"
        }
      </script>


    <article class="post">
</html>

我想提取&lt;script type="application/ld+json"&gt;&lt;/script&gt; 之间的数据。我已尝试使用以下代码,但无法正常工作。

Pattern pattern = Pattern.compile("<script type=\"application\\/ld\\+json\">(.*?)</script>");
Matcher matcher = pattern.matcher(str);
    while (matcher.find()) {
       System.out.println(matcher.group(1));
    }

我做错了吗? 谢谢。

【问题讨论】:

  • 是的,你做错了什么:html 上的正则表达式 = 坏主意。使用 DOM 解析器...
  • 在模式的开头添加(?s)
  • 谢谢,成功了。 DOM 解析器,尤其是来自jsoup.org/download 的解析器本来是一个更简洁的解决方案,但这是一个非常小的玩具项目,所以为了速度,将使用正则表达式破解。不过还是谢谢。

标签: java html regex


【解决方案1】:

Jsoup 可能是最适合您的解决方案;它允许您快速轻松地解析 HTML。 对于您的特定问题(假设您从字符串中获取 HTML),以下将起作用:

Document doc = Jsoup.parse(str);
Elements scriptElements = doc.select("script[type=\"application/ld+json\"]");
String scriptContent = scriptElements.first().html()

【讨论】:

    【解决方案2】:

    从上面的 HTML 中选择 JSON 的正则表达式

    <script type="application\/ld\+json">(.*)<\/script>
    

    在 Java 代码中:

    String str = "<htm><section class=\"posts\"><script type=\"application/ld+json\">{\"url\": \"http://schema.org\",          \"title\": \"some Title\"}</script><article class=\"post\"></html>";
    String regex = "<script type=\"application\\/ld\\+json\">(.*)<\\/script>";
    Pattern pattern = Pattern.compile(regex, Pattern.DOTALL);
    Matcher matcher = pattern.matcher(str);
    while (matcher.find()) {
      System.out.println(matcher.group(1));
    }
    

    打印

    {"url": "http://schema.org", "title": "some Title"}

    解释见DEMO

    【讨论】:

      猜你喜欢
      • 2016-11-12
      • 2019-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多