【问题标题】:Extract the contents of heading tags (h1 to h6) using regex in java [duplicate]在java中使用正则表达式提取标题标签(h1到h6)的内容[重复]
【发布时间】:2015-05-27 21:37:02
【问题描述】:

我想从网页中提取所有标题标签的内容。 我试过这个正则表达式

(?i)<h([1-6].*?)>(.*?)</h([1-6])>

问题是如果head标签是这样的-

<h1><I>Contents</I></h1>

它给了我输出 -

<I>Contents</I>.

我希望它只打印

内容

在输出中。 我应该如何修改?

【问题讨论】:

标签: java html regex pattern-matching


【解决方案1】:
(?<=\>)(?!\<)(.*)(?=\<)(?<!\>)

即使输入为&lt;h1&gt;&lt;I&gt;Contents&lt;/I&gt;&lt;/h1&gt;,这也将起作用。在这里测试一下:https://regex101.com/r/tF7tG7/1


说明

使用lookaheads 和lookbehinds,我总是检查你的捕获组的开头是否没有更多的&gt; 字符。然后我捕捉中间的一切。然后,我检查在我捕获的那个之前是否没有更多的&lt;。查看前瞻和后瞻,以获得更清晰的理解。

用 PHP 实现

<?php
$string = "<h1><I>Contents</I></h1>";
preg_match("#(?<=\>)(?!\<)(.*)(?=\<)(?<!\>)#", $string, $matches);
var_dump($matches[1]);

警告

看在上帝的份上,请不要使用正则表达式来解析任何形式的 HTML 或 XML。

主要编辑

(?<=(?!h1|h2|h3|h4|h5|h6)\>)(?!\<)(.+?)(?=\<\/.+?(?=h1|h2|h3|h4|h5|h6))

此正则表达式以您想要的方式解析内容。在这里测试一下:https://regex101.com/r/vM1rI0/1

【讨论】:

  • OP 正在寻找标题 h1..h6。看起来你的正则表达式没有:它将匹配看起来像 html 开始和结束标签的东西之间的任何东西。
  • 看起来很有趣。但它在段落标签、标题标签等之间匹配内容。
  • @alice 对不起,我误读了这个问题。以为你想要里面的内容。回家后我会更正答案。
  • @jvitasek 此代码适用于“

    Contents

    ”。但不适用于“

    Contents

    ”。请帮帮我。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-12-16
  • 2017-09-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-05
  • 1970-01-01
相关资源
最近更新 更多