将一长行 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;
...但这在一行中给出了所有内容,因此它对我需要的东西毫无用处。所以我的问题:
- 有没有我可以使用的很好的正则表达式将它分成多行? (我不关心缩进,因为它只是为了匹配正则表达式)
- HTMLL::TreeBuilder 将 DOM 导出为多行字符串的方法?
在 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;
}
我有一些网站(不是我自己的)有超长的行,他们缩小了 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;
...但这在一行中给出了所有内容,因此它对我需要的东西毫无用处。所以我的问题:
- 有没有我可以使用的很好的正则表达式将它分成多行? (我不关心缩进,因为它只是为了匹配正则表达式)
- HTMLL::TreeBuilder 将 DOM 导出为多行字符串的方法?
在 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;
}