我遇到了C ++标准正则表达式库无法编译递归正则表达式的问题。
在Internet上查找,我发现这是一个众所周知的问题,人们建议使用Boost库。这是被牵连的一个:
\\((?>[^()]|(?R))*\\)|\\w+
我想做的基本上是使用此正则表达式根据空格和方括号(包括方括号内的平衡方括号)来拆分语句,但是每一段显示如何使用boost进行操作的代码都无法正常工作我不知道为什么。预先感谢。
答案 0 :(得分:1)
您可以使用R"(...)"
语法,使用原始字符串文字来声明正则表达式。这样,您就不必两次转义反斜杠。
cf。,这些是相等的声明:
std::string my_pattern("\\w+");
std::string my_pattern(R"(\w+)");
括号不是正则表达式模式的一部分,它们是原始字符串文字定界符部分。
但是,您的正则表达式不太正确:您只需要递归第一个替代方案,而不是整个正则表达式。
这里是解决方法:
std::string my_pattern(R"((\((?:[^()]++|(?1))*\))|\w+)");
在这里,(\((?:[^()]++|(?1))*\))
与(
和)
以外的1个以上的字符匹配,或者使用(?1)
regex subroutine递归整个第1组模式。
请参见regex demo。