2012-05-11 151 views
0

我有一個這樣的字符串:正則表達式多次匹配多行

Name: John Doe 

Age: 23 

Primary Language: English 

Description: This is a multiline 
description field that I want 
to capture 

Country: Canada 

這不是實際的數據,但你可以看到我想要做的事。我想使用正則表達式來獲取「鍵」字段(名稱,年齡,主要語言,描述,國家)及其值的數組。

我正在使用PHP。

我當前的嘗試是這樣的,但它不工作:

preg_match('/^(.*?\:) (.*?)(\n.*?\:)/ism', $text, $matches); 
+0

有一個\ n但你的修飾語說每個換行符都是一個新的字符串。而且。也匹配\ n –

+0

我假設數據由用戶填充。數據來自'$ _POST'還是來自數據庫? – Biotox

回答

1

這裏有一個解決方案:http://rubular.com/r/uDgXcIvhac

\s*([^:]+?)\s*:\s*(.*(?:\s*(?!.*:).*)*)\s* 

請注意,我使用了負向前視斷言(?!.*:)。這是唯一一種可以檢查下一行不是看起來像是一個新字段並且同時繼續停止的地方。 (這就是爲什麼lookaheads和lookbehinds被稱爲零寬度斷言。)

編輯:刪除有關任意寬度lookaheads;我誤解了。上述解決方案很好。