2011-12-23 44 views
5

說我有一個sregex對象像這樣的:如何迭代xpressive中的命名組?

boost::xpressive::sregex::compile("(?P<firstword>\\w+) (?<secondword>\\w+)!"); 

我一直沒能找到關於這個xpressive中文檔中的任何引用,儘管xpressive中支持命名組就好了。

我知道有可能通過組迭代就好了,但是如何訪問groupname(如果組中有名稱)呢?

那麼,我將如何遍歷命名組?

+2

重複:http://stackoverflow.com/questions/2718607/cboostregex-iterate-over子匹配 – 2011-12-27 16:20:45

+2

這是如何重複的?鏈接的答案不會**回答它,因爲它只是直接從頭中引用代碼(除了使用該代碼僅僅是破解的事實外),它甚至沒有示例。爲什麼我甚至想解釋?有人會告訴我「這是完全重複的等等等等等等。」 SO真正失去了用處。這還是很好,就像一個紳士。 – hiobs 2011-12-28 05:35:57

+1

重複不是關於答案;他們是關於問題。你的小咆哮不會改變 – 2011-12-28 14:02:42

回答

4

假設我們把整個正則表達式你工作, IIT似乎我的觀點,你要創建一個正則表達式匹配兩個 命名捕獲的這一點,所以它是無用的嘗試遍歷命名的捕獲。

你只需要嘗試這樣的事情。

std::string str("foo bar"); 
sregex rx = sregex::compile("(?P<firstword>\\w+) (?<secondword>\\w+)!"); 
smatch what; 
if(regex_search(str, what, rx)) 
{ 
    std::cout << "char = " << what["firstword"] << what["secondword"] std::endl; 
} 

如果正則表達式是一個更復雜的模式,爲什麼不使用靜態命名捕獲的一部分: http://www.boost.org/doc/libs/1_41_0/doc/html/xpressive/user_s_guide.html#boost_xpressive.user_s_guide.named_captures.static_named_captures

+0

不幸的是,使用'operator []'是當前訪問命名組的唯一方法。我希望xpressive可以通過成員函數訪問組名... – hiobs 2012-01-03 09:58:10