2013-06-12 42 views
2

我需要一個匹配跨越多行的模式的正則表達式。例如,我需要採取特定作者的第一個git提交。正則表達式:匹配多行模式

我知道有一種使用git的方法,但我希望它在正則表達式中。

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,但我不能讓它開始對下一行進行搜索。 我測試它在http://gskinner.com/RegExr/

我希望它匹配

commit 9a06fd844952587774632f470442288e422910da 
Author: Mark Gitter 

任何想法?

+0

我試圖去下一行。例如,我期望'commit [a-z0-9] * \ nAuthor'匹配'commit 9a06fd844952587774632f470442288e422910da Author'但它沒有。我究竟做錯了什麼? –

+1

你在Windows上。好像它包含'\ r'。使用'\ s +'使其更健壯。 'commit([a-z0-9] {40})\ s + Author' – Prinzhorn

回答

1

使用\r\n新行:

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

是的,問題是線返回。我發現'提交(。*)[(\ r)|(\ n)|(\ r \ n)]作者:(\ s * \ w +)'很漂亮的跨平臺...... –

+0

對我來說,作者的名字。 –

+0

它將捕獲只是第一個名字,我的主要目的是顯示如何處理新的行字符,但我更新的答案來捕獲全名 –

2

由於一些作者的名字包含空格,我們可以捕捉一切達<標誌,不包括前面的空間。

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

這是proof of concept