如何在C ++中对多个正则表达式使用正则表达式“分组”?

曼托什·库玛(Mantosh kumar)

这是上一个SO问题及其讨论的延续。

std :: regex_match和std :: regex_search之间的区别

在我的SO问题中,编写了以下正则表达式以从给定的输入字符串中获取日期

std::string input{ "Mon Nov 25 20:54:36 2013" };
//Day:: Exactly Two Number surrounded by spaces in both side
std::regex  r{R"(\s\d{2}\s)"};

在一个答案中,它被更改为R"(.*?\s(\d{2})\s.*)"创建并因此捕获组和第一个子匹配。一切都可以使用regex_match解析日期信息regex_search

现在,我编写了以下代码,regex expressions以解析上述输入字符串中的各种内容,如下所示:

std::string input{ "Mon Nov 25 20:54:36 2013" };


   //DayStr:: Exactly Three Letter at the start and followed by spaces(Output: Mon)
    std::regex   dayStrPattern{ R"(^\w{3}\s)" };
    //Day:: Exactly Two Number surrounded by spaces in both side(Output: 25)
    std::regex   dayPattern{ R"(\s\d{2}\s)" };
    //Month:: Exactly Three letter surrounded by spaces in both side(Output: Nov)
    std::regex   monthPattern{ R"(\s\w{3}\s)" };
    //Year:: Exactly Four Number at the end of the string(Output: 2013)
    std::regex   yearPattern{ R"(\s\d{4}$)" };
    //Hour:: Exactly two Number surrounded by spaces in left side and : in right side(Output:20)
    std::regex   hourPattern{ R"(\s\d{2}:{1})" };
    //Min:: Exactly two Number sorruounded by : in left side and : in right side(Output: 54)
    std::regex   minPattern{ R"(:{1}\d{2}:{1})" };
    //Second::Exactly two Number surrounded by : in the left side and space in right side(Output: 36)
    std::regex   secPattern{ R"(:{1}\d{2}\s)" };

我在这里测试了上述正则表达式,它们似乎是正确的。

现在我们可以在这里使用分组机制了,以便我们在方法中传递单个regex表达式std::regex_search而不是7个不同的regex。?。这样std :: regex_search会将输出存储到其std::smatch子匹配向量中。有可能在这里吗?我读了documentationA,Tour Of C++ book但是对A的了解却很少regular expression grouping

通常,何时以及如何使用/设计分组,以便一次调用std :: regex_search就能获得各种信息?

此时,我必须使用不同的regex表达式调用7次std :: regex_search来获取各种信息,然后使用它。我可以肯定地说,有一种比我现在正在做的更好的方法来实现它。

普雷托里亚人

无需调用regex_match7次以匹配同一输入的7个部分,只需创建多个捕获组即可,而不是每次都创建一个捕获组。例如,将您更改regex

std::regex r{R"(^(\w{3}) (\w{3}) (\d{2}) (\d{2}):(\d{2}):(\d{2}) (\d{4})$)"};

然后,只需match_results调用一次,就可以获取所有匹配项regex_match

if (std::regex_match(input,match,r)){
    for(auto const& m : match) {
        std::cout << m << '\n';
    }
}

现场演示

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

括号分组如何影响正则表达式结果?

来自分类Dev

Vim:如何使用新的正则表达式撤消正则表达式?

来自分类Dev

如何在Lua中通过正则表达式重复匹配多个表达式

来自分类Dev

如何在awk中打印正则表达式?

来自分类Dev

如何使用正则表达式匹配多个项目

来自分类Dev

如何在正则表达式中包含“ +”

来自分类Dev

如何在正则表达式中匹配“ [”和“]”?

来自分类Dev

正则表达式分组与C ++ 11正则表达式库匹配

来自分类Dev

如何在正则表达式中验证BIGINT

来自分类Dev

如何使用正则表达式匹配多个单词

来自分类Dev

如何在正则表达式中应用条件

来自分类Dev

如何在正则表达式中存储值以在同一正则表达式中使用

来自分类Dev

如何在正则表达式中添加空格?

来自分类Dev

如何在正则表达式中合并行?

来自分类Dev

如何在代码中编写正则表达式

来自分类Dev

如何使用正则表达式匹配多个标记?

来自分类Dev

如何使用正则表达式匹配多个段落?

来自分类Dev

如何在Powershell中编写正则表达式

来自分类Dev

如何在XSD中编写正则表达式

来自分类Dev

如何在正则表达式中设置maxlength?

来自分类Dev

如何在Safari中运行正则表达式

来自分类Dev

如何在熊猫中对命名组使用多个正则表达式

来自分类Dev

如何在正则表达式中执行“ NOT”?

来自分类Dev

如何在javascript中开发正则表达式?

来自分类Dev

如何在awk中打印正则表达式?

来自分类Dev

正则表达式:如何使用正则表达式从句子中删除英语单词?

来自分类Dev

C ++使用正则表达式搜索“正则表达式运算符”

来自分类Dev

如何使用正则表达式使用正则表达式匹配以“ $”结尾的内容?

来自分类Dev

如何用分组解释正则表达式减法

Related 相关文章

  1. 1

    括号分组如何影响正则表达式结果?

  2. 2

    Vim:如何使用新的正则表达式撤消正则表达式?

  3. 3

    如何在Lua中通过正则表达式重复匹配多个表达式

  4. 4

    如何在awk中打印正则表达式?

  5. 5

    如何使用正则表达式匹配多个项目

  6. 6

    如何在正则表达式中包含“ +”

  7. 7

    如何在正则表达式中匹配“ [”和“]”?

  8. 8

    正则表达式分组与C ++ 11正则表达式库匹配

  9. 9

    如何在正则表达式中验证BIGINT

  10. 10

    如何使用正则表达式匹配多个单词

  11. 11

    如何在正则表达式中应用条件

  12. 12

    如何在正则表达式中存储值以在同一正则表达式中使用

  13. 13

    如何在正则表达式中添加空格?

  14. 14

    如何在正则表达式中合并行?

  15. 15

    如何在代码中编写正则表达式

  16. 16

    如何使用正则表达式匹配多个标记?

  17. 17

    如何使用正则表达式匹配多个段落?

  18. 18

    如何在Powershell中编写正则表达式

  19. 19

    如何在XSD中编写正则表达式

  20. 20

    如何在正则表达式中设置maxlength?

  21. 21

    如何在Safari中运行正则表达式

  22. 22

    如何在熊猫中对命名组使用多个正则表达式

  23. 23

    如何在正则表达式中执行“ NOT”?

  24. 24

    如何在javascript中开发正则表达式?

  25. 25

    如何在awk中打印正则表达式?

  26. 26

    正则表达式:如何使用正则表达式从句子中删除英语单词?

  27. 27

    C ++使用正则表达式搜索“正则表达式运算符”

  28. 28

    如何使用正则表达式使用正则表达式匹配以“ $”结尾的内容?

  29. 29

    如何用分组解释正则表达式减法

热门标签

归档