我在标准正则表达式库不编译递归正则表达式时遇到了问题C++。
在互联网上查找,我发现这是一个众所周知的问题,人们建议使用boost库。 这是有罪的:
\((?>[^()]|(?R))*\)|\w+
我正在尝试做的基本上是使用此正则表达式根据空格和括号(包括括号内的平衡括号的情况(拆分语句,但是显示如何使用 boost 执行此操作的每一段代码都无法正常工作,我不知道为什么。提前谢谢。
原始字符串文字,使用R"(...)"
语法声明正则表达式。这样,您就不必两次转义反斜杠。
参见,这些是平等的声明:
std::string my_pattern("\w+");
std::string my_pattern(R"(w+)");
括号不是正则表达式模式的一部分,它们是原始字符串文字分隔符部分。
但是,您的正则表达式并不完全正确:您只需要递归第一个替代方案,而不是整个正则表达式。
这是修复:
std::string my_pattern(R"((((?:[^()]++|(?1))*))|w+)");
在这里,(((?:[^()]++|(?1))*))
匹配项和 1+ 字符,而不是 (
并使用(?1)
正则表达式子例程)
或递归整个组 1 模式。
请参阅正则表达式演示。