如何使用Java中的正则表达式提取HTML的标签数据?

时间:2016-12-13 08:23:30

标签: java regex

我尝试使用Java从电子邮件中读取用户名和密码 它以html格式返回邮件内容,我只想提取<td>标签下的用户名和密码。以下是我的HTML代码段 -

<table width="200">
   <tbody>
     <tr>
        <td colspan="2">Your Account Details:</td>
     </tr>
      <tr>
        <td>EmailId:</td>
        <td><a class="moz-txt-link-abbreviated" href="mailto:jainish.m.kapadia@trimantra.net">jainish.m.kapadia@trimantra.net</a></td>
      </tr>
      <tr>
         <td>Password:</td>
         <td>C3mRXh+|n#1J</td>
      </tr>
  </tbody>
</table>

我如何实现这一目标?

2 个答案:

答案 0 :(得分:3)

请不要尝试使用RegEx解析HTML, 有关您不应该尝试此操作的详细答案,请参阅此SO answer

您可以使用jsoup解析HTML字符串,如下所示:

String html = "<html><head><title>First parse</title></head>"
  + "<body><p>Parsed HTML into a doc.</p></body></html>";
Document doc = Jsoup.parse(html);

Element content = doc.getElementById("content");
Elements links = content.getElementsByTag("a");
for (Element link : links) {
  String linkHref = link.attr("href");
  String linkText = link.text();
}

jsoup还提供了分层导航的方法,如

siblingElements();
nextElementSibling();

等等。

答案 1 :(得分:1)

您可以使用以下代码段:

String str = "your html";
Pattern pattern = Pattern.compile("(<td>(.*?)<\\/td>)");
Matcher matcher = pattern.matcher(str);

这将返回所有<td>标记。现在,您可以遍历matcher并获取所需的字符串。