gpt4 book ai didi

c++ - 递归正则表达式与boost匹配

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:02:44 24 4
gpt4 key购买 nike

我遇到了 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) regex subroutine 递归整个第 1 组模式.

参见 regex demo .

关于c++ - 递归正则表达式与boost匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56622828/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com