2013-01-11 82 views
3

我花了大部分時間學習正則表達式,試圖解析我的程序所做的配置文件。目前,配置文件隱約類似於INI文件,但稍後將進行擴展。它的結構是這樣的Boost正則表達式混淆

> ##~SECTIONNAME~## 
> #KEY#value/# 
> #KEY#value/# 
> #KEY#value/# 

> ##~ANOTHERSECTION~## 
> #KEY#value/# 
> #KEY#value/# 
> #KEY#value/# 

我想要做的是將部分名稱返回爲字符串。我的正則表達式是#{2}〜(。*)〜#{2},它在在線perel正則表達式測試儀上工作正常。但是當我通過C++運行它時,我得到了奇怪的結果。

split_regex(sectionList,file,regex("#{2}~(.*)~#{2}")); 

sectionList是一個臨時數據保存器,它將保存段名的列表。文件是包含來自加載的配置文件的所有文本的字符串。目前做的是給我一個空白的第一個索引。第二個索引包含一個字符串,其中包含LAST部分之下的所有內容

我的最終目標是擁有一個對的向量,一個持有部分列表的文本,另一個持有另一個向量。第二個向量將保存將保存鍵和值的類的實例(或者可能只是另一對)。

這是怎麼回事?我明白如何正確編寫正則表達式。但即使查看了正則表達式的boost文檔,我仍然不確定如何去使用正則表達式。

感謝您閱讀我的問題。我真的很感激你花時間這樣做。任何幫助,將不勝感激。

回答

2

看看documentation爲升壓split_regex功能。提供的正則表達式用作分隔符來分割字符串。

您的正則表達式匹配您想要的部分,但如果您真的想使用split_regex,它應該匹配您的部分名稱的所有之間的所有

最新版本的C++(C++ 11)提供了關於正則表達式的new featuresThis particular function能夠確定一個字符串是否與給定的正則表達式匹配並返回所有匹配。查看最後一個鏈接頁面上提供的示例。

+0

...另請參閱boost的'regex_search'。 –

+0

通過Boost的[regex_iterator](http://www.boost.org/doc/libs/1_52_0/libs/regex/doc/html/boost_regex/ref/regex_iterator.html),您甚至可以遍歷所有匹配項。 – Sander

+0

謝謝。這個答案讓我走上了正確的軌道。並感謝兩位評論。我也會檢查這些部分。 同時,我有足夠的設置我的文件操作的基礎知識。非常感謝:D – Legacyblade