从命令行命名捕获组

从命令行命名捕获组

我想出了以下正则表达式:

\[release(\s+(?<release_type>.*))?\]\n+(?<release_notes>.*)

这个想法是解析提交消息的几个参数:

[release minor]

Hello world

- asd
- zxc

匹配的结果应该是release_type = 'minor'release_notes = 'Hello world\n…

由于 macOS 中的正则表达式引擎较旧,因此我尝试使用 perl。

我试过了:

perl -e 'print "$+{release_notes}" while /\[release(\s+(?<release_type>.*))?\]\n+(?<release_notes>.*)/gs;' msg.txt

但由于某种原因,这种表达未能按预期发挥作用。

事实上,即使是更简单的

perl -ne 'print "$+{release_notes}" while /\n(?<release_notes>.*)/gs;' msg.txt 

失败。

perl -ne 'print "$+{release_notes}" while /(?<release_notes>.*)/gs;' msg.txt 

成功并返回整个输入。

我可能在这里遗漏了一些简单的东西,但不确定它是什么。

答案1

这个答案游戏给我一个解决方案:添加-0777命令即可解决问题。

去引用:

即使如此,它仍然需要-0777取消设置输入记录分隔符,因此文件会被立即读取;参见 https://stackoverflow.com/questions/37582501/why-use-the-pn-in-slurp-mode-in-perl-one-liner/37583183#37583183

相关内容