【问题标题】:Extract section contents from HTML using perl使用 perl 从 HTML 中提取部分内容
【发布时间】:2023-04-10 10:31:02
【问题描述】:

我想使用 perl 在 HTML 字符串中获取 section 标签的所有内容。我正在使用以下代码行,但它似乎不起作用:

$article_content =~ s/^.*?<section>(.*)<\/section>.*?$/$1/;

【问题讨论】:

  • @jordanm 强制回复:stackoverflow.com/a/4234491/211627
  • 感谢您的 cmets。很有教育意义。
  • @Cyborgx37 我认为 tchrist 的特定帖子包含一定程度的讽刺意味。
  • @TLP - 也许,但根据我的经验,说“这种方式是可能的,但极其困难。这种方式要简单得多”更有效。然后说“不要那样做。那样做。由于你无法理解的原因,这样更好。”

标签: regex perl html-parsing


【解决方案1】:

(.*) 更改为(.*?) 看看是否有帮助。

【讨论】:

  • 但是请注意,这并非在所有情况下都能完美运行。例如。 &lt;section&gt;abc&lt;!--&lt;/section&gt;--&gt;xyz&lt;/section&gt;
  • 而且,是的,我的方法不适用于@Cyborgx37 示例。但既然我们公司也在生成内容,这不应该发生(我希望......)
  • 那么这两个变体在捕获组中的结果是什么?即 (.*) 和 (.*?)
  • 这种情况,我加了/s选项后,还是一样的。如果我理解正确, (.*?) 是非贪婪的方式,并且由于我们的 html 中只有一个
    标签,因此 (.*) 和 (.*?) 具有相同的结果...
  • 没错,现在我知道你只有一个
    。但是,对于您尝试进行的那种匹配(我不是在谈论您是否正在使用 HTML),您应该养成明智地使用 (.*?) 的习惯。当您知道要匹配的组之前和之后的某些内容时,您几乎总是希望不贪婪。
【解决方案2】:

不要使用正则表达式解析 HTML。您无法使用正则表达式可靠地解析 HTML。一旦 HTML 与您的期望发生变化,您的代码就会被破坏。有关如何使用 Perl 模块正确解析 HTML 的示例,请参阅 http://htmlparsing.com/perl.html

【讨论】:

  • 这并不完全正确。见stackoverflow.com/a/4234491/211627。正确的回答应该是:“用正则表达式解析 HTML 是一种困难的方法。考虑一些更简单的方法,比如 XYZ。”
  • 对于初学者来说已经足够接近了。汤姆克里斯蒂安森知道规则,所以他可以打破规则。 OP 没有。
  • 一旦 HTML 与您的预期不同,无论您如何从 HTML 中提取数据,它都可能会破坏您的代码。
  • 我在说的是,如果每个都变成 &lt;section &gt;&lt;section id="foo"&gt;,那么寻找 &lt;section&gt; 的 OP 代码将会中断,这是完全有效的,不应该改变他的行为程序。
  • 工程师对“无法解决”的问题着迷。告诉我有些事情是做不到的,我会本能地试图证明你错了。但是告诉我,有些事情是极其困难的,而且奖励很少,我会跟着你去寻找更简单的解决方案。
【解决方案3】:

第一个问题是您假设. 匹配任何字符,但只有在使用/s 时才会出现这种情况。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-26
    • 1970-01-01
    • 2011-04-26
    • 1970-01-01
    • 1970-01-01
    • 2011-05-04
    • 2012-11-06
    • 1970-01-01
    相关资源
    最近更新 更多