명령줄에서 명명된 캡처 그룹

명령줄에서 명명된 캡처 그룹

나는 다음과 같은 정규식을 생각해 냈습니다.

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

관련 정보