Perl 和 Regex - 单行模式匹配

Chr*_*nes 6 regex string perl whitespace

为什么不

perl -ne "print if /(<Conn)([\S|\s]+?)(>)/sg;" /path/to/file
Run Code Online (Sandbox Code Playgroud)

匹配

perl -ne "print if /(<Conn)([\S|\s]+?)(>)/sg;" /path/to/file
Run Code Online (Sandbox Code Playgroud)

当它匹配时

<Connector port="PORT" protocol="HTTP/1.1" SSLEnabled="true"
           maxThreads="150" scheme="https" secure="true"
           clientAuth="false" sslProtocol="TLS" />`
Run Code Online (Sandbox Code Playgroud)

我需要做什么才能将两者与相同的正则表达式匹配?

kjp*_*res 6

-n选项逐行读取文件,但您可以通过取消定义输入行终止符来将一行更改为整个文件。这是使用local $/;或使用命令行选项完成的-0777,如下所示:

perl -0777ne 'print "$1\n" while /(<Conn.+?>)/sg;' /path/to/file
Run Code Online (Sandbox Code Playgroud)

它立即读入整个文件。如果这是一个问题,请尝试设置$/>(因为您的模式始终以 结尾>)或-o076在命令行上:

perl -076ne 'print "$1\n" if /(<Conn.+?>)/sg;' /path/to/file
Run Code Online (Sandbox Code Playgroud)