递归正则表达式与提升匹配
Recursive regular expression match with boost
我在标准正则表达式库不编译递归正则表达式时遇到了问题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 模式。
请参阅正则表达式演示。
相关文章:
- 使用正则表达式regex_search在字符串中查找字符串
- 在 C++ 中使用正则表达式错误时出现问题 括号表达式中的范围无效
- C++正则表达式无限循环
- FindPackageHandleStandardArgs.cmake:137 的 CMake 错误(消息):找不到 Boost (缺少:正则表达式)(找到合适的版本"1.72.0",
- 定义有趣的宏和正则表达式在Z3 C++绑定
- 带有多个字符分隔符的正则表达式
- C++ 使用增强正则表达式库时断言崩溃
- 有人可以帮助我处理正则表达式吗?
- 使用正则表达式获取大括号块的列表
- 正则表达式以匹配数字的重复模式,后跟任何类型的分隔符?
- 组合正则表达式部分使用 | 不起作用的 C++
- 为什么C++正则表达式这么慢?
- 如何使HTML5电子邮件验证正则表达式在C++中工作?
- 在C++中实现正则表达式
- C++正则表达式替换整个单词
- 用C++编写正则表达式的正确方法是什么?
- 如何从Stroustrup的C++书中解释这个正则表达式?
- 为什么这个正则表达式C++在括号表达式中抛出无效范围异常?
- 递归正则表达式与提升匹配
- 递归匹配与 boost 正则表达式库