コマンドラインからの名前付きキャプチャグループ

コマンドラインからの名前付きキャプチャグループ

私は次の正規表現を思いつきました:

\[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

関連情報