c++ - 编写正则表达式模式 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)
所以不是我需要的。将不胜感激一些帮助。
解决方案
要匹配(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]+\)
推荐阅读
- java - 我可以在一个 JSP 中有两个按钮吗?
- ansible - Ansible - 无法打印出空变量
- excel - Microsoft Excel -> 如何将颜色应用于交替行,但仅限于 X 和 Y 列(通过公式)
- sql - 如何在 SQLAlchemy > Presto 连接中指定 https 协议?
- python - 重命名图像文件时系统找不到指定的文件
- powershell-5.0 - 如何将参数传递给新进程中的脚本块
- attachment - 无法删除某人已打开的列表附件
- javascript - 轮播导致屏幕在幻灯片更改时移动到页面顶部
- asp.net - ASP.NET ActionFilter 的生命周期
- python - 端点从 Pytest 返回 404