2015-08-14 60 views
0

我有以下的正則表達式,我想從文本中提取一些與(n)的參數模板標籤:正則表達式,我想回到一個子匹配(n)的值

\{{2}([\w\-\d]+)([\s:\,]*(?:\[([\w\%]+)\])*)*\}{2} 

但問題是上面的正則表達式只返回最後一個參數,我想捕獲所有參數。這個參數也可以重複多次。我看不出什麼是錯的。有人可以幫助我嗎?

Exemples:

Exemple 1 {{url-builder: [linktitle], [email]}} // Return ['url-builder', 'email'] 
Exemple 2 {{url-builder: [linktitle]}} // Return ['url-builder', 'linktitle'] 

爲例1應返回[ '網址建設者', '鏈接標題', '電子郵件']

更具體地講,我有如下文字

Aocontráriodo que se acredita,Lorem Ipsumnãoésimplesmente um textorandômico。 com mais de 2000 anos,{{url-builder:[linktitle],[email]}} suasraízespodem ser encontradas em uma {{author-name}} obra de literatura latinaclássicadatada de 45 AC。理查德麥克林托克,這位教授是尼泊爾漢普登 - 悉尼學院的教授,

從上面的文字中,我想抓住所有標籤{{tag}}。但是一些標籤可以有參數{{tag:parameter-1}},並且這些參數可以重複多次{{tag:parameter-1:parameter-1}}。我試圖用標籤和所有參數來捕獲單個數組。

+0

你使用什麼正則表達式風味/工具/編程語言?你如何從匹配結果中提取捕獲組? – Bergi

+0

我正在使用php來分析時事通訊模板。 – user2434945

回答

0

是的,捕獲組通常只存儲其模式的最後一次出現。你可以用所有的參數在一組,讓他們:

\{\{([\w\-]+):\s*((?:\[[\w\%]+\][,\s]*)*)\}\} 
    ^ ^^     ^

然後拆分後通過/[,\s]+/得到一個列表。

+0

使用兩個正則表達式來捕獲標籤看起來很醜陋,但是,如果捕獲組僅存儲其最後一次出現的模式,那麼我就沒有別的辦法了。感謝幫助。 – user2434945

+0

@ user2434945:它們不適用於所有正則表達式引擎。根據您的編程語言,可能有一種方法可以訪問早期的匹配。我不確定PHP,請檢查文檔。 – Bergi