2012-07-03 19 views
1

我有這個字符串正則表達式有小蟲子

hey {Bobby|Apple|Peter}, nice to meet you {David} 

與此正則表達式:

(\{(\w+)(\|(\w+))*)\} 

答案:

Bobby 
Peter 
David 

然而,它沒有得到 「蘋果」,我怎樣才能解決這個問題呢?

謝謝!

+0

這功課?大衛應該有大寫字母嗎? –

+0

不是作業...是的,現在編輯。 –

+0

K,然後我會回答,我會試着在boost中找到'find' :) –

回答

1

重複不適用於羣組。相反,嘗試迭代使用字符串查找。可能最好先過濾出{Bobby|Apple|Peter},從中獲取名稱,然後找到{David}並從中獲取名稱。所以這將是兩個發現,如果你繼續使用正則表達式。或者一個find,然後從結果|分裂。

找到的正則表達式:\{(\w+(?:\|\w+)*)\},然後使用組1(的所有內容在的花括號內)並拆分結果。

+0

我不太熟悉boost :: regex,但我不認爲他們有過濾器/查找功能。 –

+0

「過濾」只是一個人類術語,用於查找內容並從剛纔找到的內容中提取數據。嘗試找到一些樣本來遍歷字符串內的匹配,像[this](http://stackoverflow.com/questions/2593288/how-to-use-c-boosts-regex-iterator)? –

0

您能否顯示重現此問題的完整最小代碼?問題在於你如何迭代捕獲的組。

+0

http://www.rubular.com/r/SsAKXfVKZU多數民衆贊成我在用什麼。 –

+1

HywC無關緊要,一組只包含最後一場比賽。 –