[英]c++ regex extract all substrings using regex_search()
我是C ++正則表達式的新手。 我有一個字符串“ {1,2,3}”,我想提取數字1 23。我以為我應該使用regex_search,但是失敗了。
#include<iostream>
#include<regex>
#include<string>
using namespace std;
int main()
{
string s1("{1,2,3}");
string s2("{}");
smatch sm;
regex e(R"(\d+)");
cout << s1 << endl;
if (regex_search(s1,sm,e)){
cout << "size: " << sm.size() << endl;
for (int i = 0 ; i < sm.size(); ++i){
cout << "the " << i+1 << "th match" <<": "<< sm[i] << endl;
}
}
}
結果:
{1,2,3}
size: 1
the 1th match: 1
std :: regex_search僅在找到第一個匹配項后返回。
std :: smatch給您的是正則表達式中所有匹配的組。 您的正則表達式僅包含一組,因此std :: smatch僅包含一項。
如果要查找所有匹配項,則需要使用std :: sregex_iterator 。
int main()
{
std::string s1("{1,2,3}");
std::regex e(R"(\d+)");
std::cout << s1 << std::endl;
std::sregex_iterator iter(s1.begin(), s1.end(), e);
std::sregex_iterator end;
while(iter != end)
{
std::cout << "size: " << iter->size() << std::endl;
for(unsigned i = 0; i < iter->size(); ++i)
{
std::cout << "the " << i + 1 << "th match" << ": " << (*iter)[i] << std::endl;
}
++iter;
}
}
輸出:
{1,2,3}
size: 1
the 1th match: 1
size: 1
the 1th match: 2
size: 1
the 1th match: 3
end
迭代器是默認情況下由設計構造的,因此當iter
用盡匹配項時,它等於iter
。 請注意,在循環底部我執行++iter
。 這將iter
轉移到下一場比賽。 如果沒有更多匹配項,則iter
與默認構造的end
具有相同的值。
另一個顯示子匹配項(捕獲組)的示例:
int main()
{
std::string s1("{1,2,3}{4,5,6}{7,8,9}");
std::regex e(R"~((\d+),(\d+),(\d+))~");
std::cout << s1 << std::endl;
std::sregex_iterator iter(s1.begin(), s1.end(), e);
std::sregex_iterator end;
while(iter != end)
{
std::cout << "size: " << iter->size() << std::endl;
std::cout << "expression match #" << 0 << ": " << (*iter)[0] << std::endl;
for(unsigned i = 1; i < iter->size(); ++i)
{
std::cout << "capture submatch #" << i << ": " << (*iter)[i] << std::endl;
}
++iter;
}
}
輸出:
{1,2,3}{4,5,6}{7,8,9}
size: 4
expression match #0: 1,2,3
capture submatch #1: 1
capture submatch #2: 2
capture submatch #3: 3
size: 4
expression match #0: 4,5,6
capture submatch #1: 4
capture submatch #2: 5
capture submatch #3: 6
size: 4
expression match #0: 7,8,9
capture submatch #1: 7
capture submatch #2: 8
capture submatch #3: 9
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.