在HTML标记之间提取数据

时间:2015-07-08 19:19:02

标签: java html regex

我的HTML页面如下所示:

<htm>

<section class="posts">

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


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

我想在<script type="application/ld+json"></script>之间提取数据。我尝试使用以下代码,但它无法正常工作。

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

我做错了吗? 感谢。

2 个答案:

答案 0 :(得分:4)

从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了解

答案 1 :(得分:2)

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

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