Perl正则表达式在线PCRE测试员工作但不在perl命令中

nul*_*dev 4 html regex bash perl pcre

我编写了以下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>
Run Code Online (Sandbox Code Playgroud)

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

zzx*_*xyz 10

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

 perl -0 -pe 's/<script.*?>[\s\S]*?< *?\/ *?script *?>//g' tmp.html
Run Code Online (Sandbox Code Playgroud)

这实际上告诉perl打破记录'\0'. perl -0777将非常明确地诋毁整个文件.