递归正则表达式与提升匹配



我在标准正则表达式库不编译递归正则表达式时遇到了问题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 模式。

请参阅正则表达式演示。

最新更新