boost库中的正则表达式
- 格式:doc
- 大小:409.50 KB
- 文档页数:17
Regex 头文件: "boost/regex.hpp"
正则表达式被封装为一个类型basic_regex的对象。我们将在下一节更深入地讨论正则表达式如何被编译和分析,这里我们首先粗略地看看basic_regex ,以及这个库中三个最重要的算法。
namespace boost { template
flag_type f=regex_constants::normal);
这个构造函数接受一个包含正则表达式的字符序列,还有一个参数用于指定使用正则表达式时的选项,例如是否忽略大小写。如果p中的正则表达式无效,则抛出一个bad_expression 或regex_error 的异常。注意这两个异常其实是同一个东西;在写这本书之时,尚未改变当前使用的名字bad_expression ,但下一个版本的Boost.Regex将会使用regex_error.
bool empty() const;
这个成员函数是一个谓词,当basic_regex实例没有包含一个有效的正则表达式时返回
true ,即它被赋予一个空的字符序列时。
unsigned mark_count() const;
mark_count 返回regex中带标记子表达式的数量。带标记子表达式是指正则表达式中用圆括号括起来的部分。匹配这个子表达式的文本可以通过调用某个正则表达式算法而获得。
flag_type flags() const;
返回一个位掩码,其中包含这个basic_regex所设置的选项标志。例如标志icase, 表示正则表达式忽略大小写,标志JavaScript, 表示regex使用JavaScript的语法。
typedef basic_regex
不要使用类型basic_regex来定义变量,你应该使用这两个typedef中的一个。这两个类型,regex 和wregex, 是两种字符类型的缩写,就如string 和wstring 是basic_string
basic_string
普通函数template
match_flag_type flags = match_default);
regex_match 判断一个正则表达式(参数e)是否匹配整个字符序列str. 它主要用于验证文本。注意,这个正则表达式必须匹配被分析串的全部,否则函数返回false. 如果整个序列被成功匹配,regex_match 返回True.
template
match_results
match_flag_type flags = match_default);
regex_search 类似于regex_match, 但它不要求整个字符序列完全匹配。你可以用
regex_search 来查找输入中的一个子序列,该子序列匹配正则表达式e.
template
basic_string
regex_replace 在整个字符序列中查找正则表达式e的所有匹配。这个算法每次成功匹配后,就根据参数fmt对匹配字符串进行格式化。缺省情况下,不匹配的文本不会被修改,即文本会被输出但没有改变。
这三个算法都有几个不同的重载形式:一个接受const charT* (charT 为字符类型), 另一个接受const basic_string
用法
要使用Boost.Regex, 你需要包含头文件"boost/regex.hpp". Regex是本书中两个需要独立编译的库之一(另一个是Boost.Signals)。你会很高兴获知如果你已经构建了Boost——那只需在命令提示符下打一行命令——就可以自动链接了(对于Windows下的编译器),所以你不需要为指出那些库文件要用而费心。