您可以使用
std::regex reg(R"(start:\s*(\d+)\s*end:)");
See the 正则表达式演示 https://regex101.com/r/MaKKHO/2.
它定义了start:\s*(\d+)\s*end:
匹配的正则表达式模式start:
, 0+ 个空格,然后将一个或多个数字捕获到第 1 组中,然后匹配 0+ 个空格和end:
子串。
请注意,如果您不能使用原始字符串文字(R"(...)"
表示法),您可以使用常规字符串文字定义模式,其中所有反斜杠都应加倍:"start:\\s*(\\d+)\\s*end:"
.
要获得所有匹配项,您需要std::sregex_token_iterator
并且在获取匹配项时,指定您需要获取所有第 1 组值:
const std::regex reg(R"(start:\s*(\d+)\s*end:)");
std::smatch match;
std::string s = "garbage 111222 garbage ... 999888 fewfew... start: 123456 end: start: 654321 end:";
std::vector<std::string> results(std::sregex_token_iterator(s.begin(), s.end(), reg, 1),
std::sregex_token_iterator());
See the 在线 C++ 演示 https://ideone.com/E6ebNm
如果里面有任何价值的话start:
and end:
, 代替\d+
with .*?
(匹配除换行符之外的任何 0+ 个字符)。