2009-11-09 70 views
1

具體來說,我有一個名爲val的字符串數組,並且想要用val[n]替換輸入中的所有"%{n}%"實例。更一般地說,我希望替換值是匹配值的函數。這是用C++編寫的,所以我使用了Boost,但如果另一個常見的正則表達式庫更符合我的需求,請讓我知道。我發現了一些.NET(C#,VB.NET)解決方案,但我不知道我是否可以在這裏使用相同的方法(或者,如果可以的話,怎麼做)。C++,Boost正則表達式,替換匹配值的值函數?

我知道有這個醜陋的解決方案:有一個表達形式"(%{0}%)|(%{1}%)...",然後有一個替代模式,如"(1?" + val[0] + ")(2?" + val[1] ... + ")"

但我想知道我想要做什麼可以做得更優雅。

謝謝!

+0

無論誰編輯這個來正確地格式化我的內聯僞代碼表達式 - 謝謝。 :) – rofrankel 2009-11-09 20:36:00

回答

1

我不相信boost :: regex有一個簡單的方法來做到這一點。我能想到的最直接的方法是使用「(%{[0-9] +}%)」模式執行regex_search,然後遍歷返回的match_results對象中的子匹配。您需要通過連接每個匹配之間的文本(match_results :: position方法將成爲您的朋友)和將子匹配轉換爲val數組中值的結果來構建一個新字符串。

+0

謝謝,我有一種感覺,這將是答案,但要仔細檢查。如果沒有人提出相反的要求,將會標記爲答案。 – rofrankel 2009-11-09 21:39:46

+0

我不是boost :: regex的專家,我只用它來做一些簡單的事情,所以用一粒鹽來回答我的答案。話雖如此,我找不到任何讓你想做的事情容易的圖書館文件。有些專家,如果有的話,可能會出現相反的情況。你可能想看看boost :: spirit爲你所做的事情,因爲你可以將「語義動作」附加到一個分析樹的匹配部分 - 你的數組查找很適合作爲語義動作。我覺得精神比正則表達式更容易使用任何複雜的東西。 – 2009-11-09 21:51:08

+0

謝謝,這很好理解,但我認爲在這種情況下可能是過度使用而不是使用我的醜陋的字符串構造解決方案。 – rofrankel 2009-11-09 21:58:37