regex_search和子串匹配

时间:2016-10-16 04:23:41

标签: c++ regex

这是我的代码:

std::string var = "(1,2)";
std::smatch match;
std::regex rgx("[0-9]+");
if(std::regex_search(var,match,rgx))
    for (size_t i = 0; i < match.size(); ++i)
        std::cout << i << ": " << match[i] << '\n';

我希望能够提取1和2,但到目前为止输出只是第一个匹配(1)。我似乎无法弄清楚为什么和我的大脑被炸。这可能是显而易见的事情

1 个答案:

答案 0 :(得分:4)

@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Fragment frag1 = new Fragment1(); FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction(); fragmentTransaction.add(R.id.frgmCont,frag1); fragmentTransaction.commit(); } 的元素用于匹配正则表达式中的组。

稍加修改的例子

regex_match

您将获得以下输出:

std::string var = "(11b,2x)";
std::smatch match;
std::regex rgx("([0-9]+)([a-z])");
if(std::regex_search(var,match,rgx))
    for (size_t i = 0; i < match.size(); ++i)
        std::cout << i << ": " << match[i] << '\n';

您想要的是使用std::regex_iterator来检查所有匹配项:

0: 11b
1: 11
2: b

这将产生所需的输出:

auto b = std::sregex_iterator(var.cbegin(), var.cend(), rgx);
auto e = std::sregex_iterator();

std::for_each(b, e, [](std::smatch const& m){
    cout << "match: " << m.str() << endl;
});

live demo