正则表达式解析器 | ![]() |
![]() |
![]() |
![]() |
正则表达式是一种模式匹配形式,常用于文本处理。许多用户将熟悉正则表达式的用法。最初有 Unix 工具 grep、sed 和 awk,以及编程语言 perl,它们都大量使用正则表达式。如今,这种正则表达式的用法已集成到更多可用的系统中。
在解析器构造过程中,通常需要使用正则表达式的功能。引入正则表达式解析器是为了使正则表达式的使用能够方便地用于 Spirit 解析器构造。
正则表达式解析器rxstrlit有一个单一的模板类型参数:迭代器类型。在内部,rxstrlit保存了包含提供的正则表达式的 Boost Regex 对象。该rxstrlit尝试将当前输入流与此正则表达式进行匹配。模板类型参数默认为char const*. rxstrlit有两个构造函数。第一个接受一个以 null 结尾的字符指针。此构造函数可用于构建rxstrlit 的从带引号的正则表达式文字。第二个构造函数接受一个first/last 迭代器对。函数生成器版本是regex_p.
这里有一些例子
rxstrlit<>("Hello[[:space:]]+[W|w]orld")
regex_p("Hello[[:space:]]+[W|w]orld")
std::string msg("Hello[[:space:]]+[W|w]orld");
rxstrlit<>(msg.begin(), msg.end());
生成的解析器对象在字符级别工作,因此在尝试匹配正则表达式时不会使用给定的跳过解析器(请参阅 Scanner Business)。
正则表达式解析器是在 Boost Regex++ 库的帮助下实现的,因此您需要牢记一些限制。
您的计算机上必须安装 Boost 库,并且 Boost 根目录必须添加到您的编译器#include<...>搜索路径。您可以在 Boost 网站下载最新版本。
Boost Regex 库需要使用双向迭代器。因此,在使用包含正则表达式解析器的 Spirit 解析器时,您必须确保这一点。
Boost Regex 库不是一个仅头文件库,而 Spirit 是。不过,如果您仅在一个编译单元中使用它,它提供了包含所有源文件的可能性。定义预处理器常量BOOST_SPIRIT_NO_REGEX_LIB在包含 Spirit 正则表达式解析器头文件之前,如果您想将所有 Boost Regex 源文件包含到此编译单元中。如果您在一个以上的编译单元中使用正则表达式解析器,则不应定义此常量,并且必须将您的应用程序与 regex 库链接,如相关文档中所述。
请参阅 regular_expression.cpp 以获取可编译的示例。这是 Spirit 发行版的一部分。
![]() |
![]() |
![]() |
Copyright © 2001-2002 Hartmut Kaiser
使用、修改和分发受 Boost Software License Version 1.0 的约束。(请参阅随附文件 LICENSE_1_0.txt 或访问 https://boost.ac.cn/LICENSE_1_0.txt 复制)