2013-06-12 5 views
2

여러 줄에 걸쳐있는 패턴과 일치하는 정규 표현식이 필요합니다. 예를 들어 특정 저자의 첫 번째 자식 커밋을 수행해야합니다.Regexp : 여러 줄 패턴 일치

나는 git를 사용하여 이것을하는 방법이 있지만 나는 regexp에서 그것을 원한다는 것을 알고있다.

commit 9a06fd844952587774632f470442288e422910da 
Author: Mark Gitter <[email protected]> 
Date: Tue Jun 11 17:13:26 2013 +0300 

    Random git comment. 

이 정규 표현식은 commit [a-z0-9]* (가) SHA-1을 커밋 일치하지만 난 다음 줄에 검색을 시작 얻을 수 없습니다. 나는 그것이

commit 9a06fd844952587774632f470442288e422910da 
Author: Mark Gitter 

어떤 아이디어를 일치시킬 http://gskinner.com/RegExr/

에서 테스트를하고있어? 새로운 라인에 대한

+0

다음 줄로 가려고했습니다. 예를 들어 나는'commit [a-z0-9] * \ nAuthor'가'commit 9a06fd844952587774632f470442288e422910da Author '와 일치한다고 기대하지만 그렇지 않습니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까? –

+1

Windows를 사용 중입니다. '\ r'을 포함하고있는 것 같습니다. 보다 강력하게하려면'\ s +'를 사용하십시오. '커밋 ([a-z0-9] {40}) \ s + 작성자 – Prinzhorn

답변

1

사용 \r\n : 저자 이름의 일부 이후

commit (.*)\r\nAuthor:(\s*\w+\s*\w+) 
+0

예, 문제는 회신입니다. 나는 (\ s * \ w +)'꽤 크로스 플랫폼이 될 수있는'commit (. *) {(\ r) | (\ n) | (\ r \ n)]] ... –

+0

나를 위해 저자의 이름. –

+0

그냥 첫 번째 이름을 캡처합니다, 내 주요 목적은 줄 바꿈 문자를 처리하는 방법을 보여 주었다 그러나 전체 이름을 캡처하는 대답을 업데이 트하고 있습니다 –

2

우리가 앞의 공간을 포함하지의 < 기호까지 모든 것을 캡처 할 수있는 공간이 포함되어 있습니다.

commit ([a-z0-9]*)\s*Author:(\s*[^<]+)(?<!\s) 

여기는 proof of concept입니다.