如何使用正则表达式提取字符串中嵌套括号内的目标内容?
解决方案
可用正则写法
针对你给出的固定INSERT((内层内容),表名)格式的字符串,直接用以下正则即可,捕获组1就是你需要的内层括号内容:
INSERT\(\(([^)]+)\)
如果你的场景不需要绑定INSERT前缀,只要提取任意两层括号的内层内容,用这个即可:
\(\(([^)]+)\)
原正则错误原因
你之前写的\(([^)]*)\)只会匹配单个左括号开头、到下一个右括号结束的内容,匹配时会命中字符串里第一个左括号,最终拿到的结果会多带一个开头的左括号,不符合要求。
C++ 调用示例
结合你用到的regex_search方法,给出可直接运行的实现代码:
#include <iostream> #include <string> #include <regex> int main() { std::string input = "INSERT((AIRBUS,A340,295,137),PlaneType)"; // C++11及以上可用原始字符串写正则,不需要额外转义斜杠 std::regex re(R"(INSERT\(\(([^)]+)\))"); std::smatch match; if (std::regex_search(input, match, re)) { std::string target = match[1].str(); // target就是需要的"AIRBUS,A340,295,137",可直接传入后续处理函数 std::cout << target << std::endl; } return 0; }
如果不用原始字符串语法,正则需要转义斜杠,写为
"INSERT\\(\\(([^)]+)\\)"即可。
适配范围说明
当前正则默认内层括号中不存在其他嵌套括号,完全符合你给出的所有输入样本的格式要求。如果后续遇到内层带括号的场景,再调整正则逻辑即可。
内容的提问来源于stack exchange,提问作者FoundTheBug
相关产品推荐
相关产品推荐

