将一长行 HTML 分成多行

Splitting up a long line of HTML into multiple lines

我有一些网站(不是我自己的)有超长的行,他们缩小了 HTML。通常这不是问题,但它会导致我的一些正则表达式出现问题(在我正在处理的这个例子中,有 12 行,如果其中一行有 750k 个字符长!!!)。

我想要做的是将行拆分为更易于管理的行,这样就不会导致正则表达式引擎阻塞。我在想这样的事情:

$_[0] =~ s/([\w\d\W]{5000}[^\<])/\n/g;

它有点用——但在我不想要的地方坏了。理想情况下,我只想将其分解为 5000 个字符,从而使行更易于管理。或者更好的是,格式正确。我也在代码中使用 HTML::TreeBuilder(在正则表达式之前),所以我尝试用以下方法清理 HTML:

        my $root = HTML::TreeBuilder->new_from_content($page);
        print $tree->as_HTML;

...但这在一行中给出了所有内容,因此它对我需要的东西毫无用处。所以我的问题:

在 HTML 中找到一个常见但不属于您的模式的元素,然后打破它。在您建议的评论中 <br>,所以我们将采用它。

如果您只想在超过一定长度时拆分线,请先检查一下。然后在一定数量的带有换行符的字符后附加 <br> 标签。

if (length $html > 100_000) {
  my $segment_length = 20_000;
  $html =~ s{
    (
      .{$segment_length} # at least n chars
      .+?                # and some padding
      <br(?:\s/)?>       # and an (x)html br tag
    )
  }{\n}gx;
}