c++ - 如何使用正则表达式 C++?

标签 c++ regex search match

我遇到了 C++ 正则表达式的问题。
我有一个像“f 123/123 1234/123/124 12”这样的字符串,我想得到“/”之前的所有数字。

这是我的正则表达式:

"\s(\d+)".

我在 http://rubular.com/ 上试过了它有效。 这是我的代码:

std::regex rgx("\\s(\\d+)");
std::smatch match;

if (std::regex_search(line, match, rgx))
{
    std::cout << "Match\n";

    std::string *msg = new std::string();
    std::cout << "match[0]:" << match[0] << "\n";
    std::cout << "match[1]:" << match[1] << "\n";
    std::cout << "match[2]:" << match[2] << "\n";

}

但是我明白了:

Match
match[0]:123
match[1]:123
match[2]:

我意识到 match[0] 不是 Python 和 Ruby 中的“组”。

最佳答案

regex_search 匹配一次(匹配正则表达式的第一个子字符串)。你需要循环。

尝试以下操作:

std::regex rgx("\\s(\\d+)");
std::smatch match;

while (std::regex_search(line, match, rgx))
{
    std::cout << match[0] << std::endl;
    line = match.suffix().str();
}

关于c++ - 如何使用正则表达式 C++?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21658860/

相关文章:

c++ - 为必须可平凡复制的 volatile 结构分配一个值

c++ - 看不到 x264 库的日志

c# - 如何使用 C# 在 <strong> 标签之间提取字符串?

java - 快速搜索不断增长的大型平面文件的最佳方法是什么?

search - 简单的文件文本搜索工具?

C++ 删除 static_cast<void*> (指针)行为

c++ - 调用不带对象参数的非静态成员函数,C++ 节点

javascript - 如何转义和取消转义 JavaScript 中的引号?

python - 使用 pandas read_csv 时将分隔符限制为仅某些选项卡

algorithm - 力扣加油站