regex_token_iterator和regex_iterator是否有區別?regex_token_iterator和regex_iterator有什麼區別?
看來他們都做同樣的工作,但不知道哪一個更好的表現?
regex_token_iterator和regex_iterator是否有區別?regex_token_iterator和regex_iterator有什麼區別?
看來他們都做同樣的工作,但不知道哪一個更好的表現?
確實存在的差異,如果我們看cppreference它描述std::regex_iterator如下:
的std :: regex_iterator是訪問底層內的正則表達式匹配個體只讀ForwardIterator字符序列。
的std :: regex_token_iterator是訪問底層的字符序列中的正則表達式的每場比賽的各個子匹配只讀ForwardIterator。它也可以用於訪問序列中與給定正則表達式不匹配的部分(例如作爲標記器)。
因此std::regex_token_iterator
允許您也匹配不匹配的標記或n-th
子表達式。
爲std::regex_token_iterator
的cppreference節我上面鏈接描述如下的典型實現:
的std :: regex_token_iterator的典型實施方案保持 底層的std :: regex_iterator,容器(例如標準::矢量) 請求的子匹配索引,內部計數器等於子匹配的索引 ,指向std :: sub_match的指針,指向當前匹配的當前子匹配的 ,以及包含該子匹配的std :: match_results對象 最後一個不匹配的字符序列(用於分詞器 模式)。
本書The C++ Standard Library解釋14.4
正則表達式令牌迭代器如下:
一個正則表達式迭代器有助於迭代匹配序列。但是, 有時您還希望處理匹配的 表達式之間的所有內容。 [...]此外,你可以指定的積分 值,它代表一個「符號化」的元素的列表:
- -1意味着你有興趣在所有匹配的正則表達式的子序列(令牌分隔符)。
- 0表示您對所有匹配的正則表達式(令牌分隔符)感興趣。
- 任何其他值n表示您對正則表達式中匹配的第n個子表達式感興趣。
書籍網站提供的示例代碼sregex_token_iterator和sregex_iterator這也應該是有幫助的。
如果@ ShafikYaghmour的答案解決了您的問題,請接受它。我個人認爲這是一個非常好的答案。 – 2015-04-27 11:30:34