gpt4 book ai didi

html - Perl 正则表达式在在线 PCRE 测试器中工作,但在 perl 命令中不工作

转载 作者:搜寻专家 更新时间:2023-10-31 02:25:21 25 4
gpt4 key购买 nike

我编写了以下 PCRE 正则表达式来从 HTML 页面中去除脚本:<script.*?>[\s\S]*?< *?\/ *?script *?>

它适用于许多在线 PCRE 正则表达式测试器:

https://regex101.com/r/lsxyI6/1

https://www.regextester.com/?fam=102647

当我在 bash 终端中运行以下 perl 替换命令时,它 起作用:cat tmp.html | perl -pe 's/<script.*?>[\s\S]*?< *?\/ *?script *?>//g'

我正在使用以下测试数据:

<script>
$(document).ready(function() {
var url = window.location.href;
var element = $('ul.nav a').filter(function() {
if (url.charAt(url.length - 1) == '/') {
url = url.substring(0, url.length - 1);
}

return this.href == url;
}).parent();

if (element.is('li')) {
element.addClass('active');
}
});
</script>

P.S. 我使用正则表达式来解析 HTML,因为当页面上有复杂的脚本时,我被迫使用的 HTML 解析器 (xmlpath) 会中断。在将脚本传递给解析器之前,我正在使用此正则表达式从页面中删除脚本。

最佳答案

你需要告诉 perl 不要用 -0 将文件的每一行分解成自己单独的记录。

 perl -0 -pe 's/<script.*?>[\s\S]*?< *?\/ *?script *?>//g' tmp.html

这实际上告诉 perl 在 '\0' 上分解记录。 perl -0777 将非常明确地吞噬整个文件。

关于html - Perl 正则表达式在在线 PCRE 测试器中工作,但在 perl 命令中不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49037283/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com