BOOST库,正则表达式


头文件:
#include <boost/xpressive/xpressive.hpp>
using namespace boost::xpressive;

正则表达式是处理文本强有力的工具,它使用一套复杂语法规则,能够解决文本处理领域的绝大多数问题,诸如验证、匹配、查找、替换等等。

xpressive提供动态和静态两种使用方式。
  • 静态方式
类似于spirit,使用操作符重载生成编译期的表达式对象,可以在编译期进行正则表达式的语法检查。
  • 动态方式
则是一字符串作为一个表达式对象,在运行时进行语法检查和处理。

  • 两种混用使用头文件<boost/xpressive/xpressive.hpp>
  • 仅使用静态方式<boost/xpressive/xpressive_static.hpp>
  • 仅使用动态方式<boost/xpressive/xpressive_dynamic.hpp>

  1. 点号(.)可以匹配任意的单个字符,是单字符的通配符。
  2. ^匹配行的开头。
  3. $匹配行的末尾。
  4. ()用于定义一个正则表达式匹配子元素(子表达式),可以被引用或者重复。
  5. *表示前面的元素可以重复任意多次。(n>=0)
  6. +表示前面的元素可以重复一次或多次.。(n>0)
  7. ?表示前面的元素可以重复0次或1次(n=0,1)
  8. {}可以手工指定元素重复的次数。{n}重复x=n次,{n,m}重复n次到m次之间的次数,即n<=x<=m。
  9. []用于定义字符合集,可以列出单个字符,也可以定义范围,或集合的补集。
  10. \是转义字符,特殊字符经转义后与自身匹配。
  11. |表示逻辑或的概念,匹配它两侧的元素之一。

basic_regex
basic_regex是xpressive库的核心,它封装了正则表达式的解析和编译。

template<typename BidiIter>
struct basic_regex;
{
basic_regex(); // 可以拷贝构造和赋值
basic_regex(basic_regex<BidiIter> const &;

rege_id_type regex_id() const; // 返回正则表达式的唯一标志
std::size_t mark_count() const; // 可以返回表达式中匹配的子表达式的个数
void swap(basic_regex< BidiIter > &);
static basic_regex< BidiIter>
complie(InputRange const & pat);
//它是工厂方法,可以根据正则表达式参数创建出一个basic_regex对象
};

typedef basic_regex<std::string::const_iterator> sregex; //用于操作标准字符串类
typedef basic_regex<char const *> cregex; //用于操作字符数组


match_results
保存了正则表达式匹配的结果。

template<typename BidiIter>
struct match_results
{
size_type size() const;
bool empty() const;
template<typename Sub>
const_reference operator[] (Sub const & i) const;
};
typedef match_results<std::string::const_iterator> smatch;
typedef match_results<char const *> cmatch;
主要为正则表达式的匹配结果提供一个类似容器的视图,可以用size()和empty()判断匹配结果中子表达式的数量,operator[] 返回第i个子表达式。如果i==0,则返回整个表达式的匹配对象

sub_match

template<typename BidiTer>
struct sub_match : public std::pair<BidiTer, BidiTer>
{
string_type str() const;
difference_type length() const;
bool operator!() const;
int compare(string_type const &) const;
bool matched;
};

regex_match()
用于接茬一个字符串是否匹配一个正则表达式,返回一个bool结果。 成功1,失败0.
bool regex_match(String, basic_regex const & re);
bool regex_match(String, match_results & what, basic_regex const & re);
最简单用法是接受两个参数,第一个参数是要被匹配检查的字符串,第二个参数是正则表达式对象( sregex, cregex)。
第二种方式是多了一个match_results输出参数,可以返回查找到的字符串。

查找
regex_search()
bool regex_search(String, basic_regex const &re);
bool regex_search(String, match_results & what, basic_regex const &re);

regex_search()可以替代string_algo的contains、starts_with和end_with和查找算法

icase 指示匹配时忽略大小写

替换
regex_replace() 它先使用正则表达式查找匹配的字符串,然后再用指定的格式替换。
String regex_replace(String, basic_regex const &re, Format)
前两个参数与regex_match()、regex_search()相同,第三个参数Format可以是一个简单字符串,也可以是一个符合ECMA-262定义的带格式的字符串,它可以用$N引用正则表达式匹配的子表达式,
$&引用全匹配。替换完成后,regex_replace()返回一个字符串的拷贝。

$1N$3 意思是所在的位置 (t).(t) 中间有值就放进去。没有就为空
<.*?> 可以替换所有的<>

猜你喜欢

转载自blog.csdn.net/koganlee/article/details/80955800