首页 > 解决方案 > 编写正则表达式模式 C++

问题描述

我需要帮助来完成这个正则表达式模式。

这是完整的字符串:

INSERT((1574,"Greene County, Missouri",mo,50,29,77,05000US29077,285449),geography)

这是我尝试使用 regex_search 搜索的字符串部分:

(1574,"Greene County, Missouri",mo,50,29,77,05000US29077,285449)

这是我的正则表达式模式和代码:

regex pattern2("\\(|[0-9]|[a-z]|[A-Z]|\,|\"|");
regex_search (substring,matcher,pattern2);
   for(auto x:matcher)
   {
     substring1 = matcher.suffix().str();
     cout << substring1 << endl;
   }

子字符串将输出:

1574,"Greene County, Missouri",mo,50,29,77,05000US29077,285449),geography)

所以不是我需要的。将不胜感激一些帮助。

标签: c++regexstring

解决方案


要匹配(1574,"Greene County, Missouri",mo,50,29,77,05000US29077,285449),您可以使用捕获组否定字符类

[^*()\r\n]+\((\([^()\r\n]+\))[^()\r\n]+\)

在零件

  • [^*()\r\n]+匹配除所列字符以外的任何字符的 1 次以上
  • \(匹配第一个左括号
  • (捕获组 1
    • \(匹配第二个左括号
      • [^()\r\n]+匹配除所列字符以外的任何字符的 1 次以上
    • \)关闭第二个左括号
  • )关闭组 1
  • [^()\r\n]+
  • \)关闭第一个左括号

正则表达式演示

您还可以通过使用重复的非捕获组并使用您打算使用的字符类中允许的字符来使模式更加受限:

[a-zA-Z0-9]+\(\(((?:[a-zA-Z0-9]+|"[a-zA-Z0-9]+(?:,? [a-zA-Z0-9]+)+")(?:,(?:[a-zA-Z0-9]+|"[a-zA-Z0-9]+(?:,? [a-zA-Z0-9]+)+"))+)\),[a-zA-Z0-9]+\)

正则表达式演示


推荐阅读