前言
本次笔记记录如下知识点
- 正则表达式的简介
- 正则表达式的匹配
- 正则表达式的查找
- 正则表达式的替换
- 正则表达式的迭代
一、正则表达式的简介
1、正则表达式的匹配规则
- 正则表达式定义了一套复杂的语法规则,用于匹配有特定模式的字符串。在正则表达式中,大部分字符都匹配自己(普通字符),只有少量的字符用于定义特殊匹配模式的语法,如下所示:
特别字符 | 描述 |
---|---|
$ | 匹配输入字符串的结尾位置。要匹配 $ 字符本身,请使用 $。 |
( ) | 标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用。要匹配这些字符,请使用 ( 和 )。 |
* | 匹配前面的子表达式零次或多次。要匹配 * 字符,请使用 *。 |
+ | 匹配前面的子表达式一次或多次。要匹配 + 字符,请使用 +。 |
( ) | 标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用。要匹配这些字符,请使用 ( 和 )。 |
. | 匹配除换行符 \n 之外的任何单字符。要匹配 . ,请使用 . 。 |
[ | 标记一个中括号表达式的开始。要匹配 [,请使用 [。 |
? | 匹配前面的子表达式零次或一次,或指明一个非贪婪限定符。要匹配 ? 字符,请使用 ?。 |
\ | 将下一个字符标记为或特殊字符、或原义字符、或向后引用、或八进制转义符。例如, ‘n’ 匹配字符 ‘n’。’\n’ 匹配换行符。序列 ‘\’ 匹配 “”,而 ‘(’ 则匹配 “(”。 |
^ | 匹配输入字符串的开始位置,除非在方括号表达式中使用,当该符号在方括号表达式中使用时,表示不接受该方括号表达式中的字符集合。要匹配 ^ 字符本身,请使用 ^。 |
{ | 标记限定符表达式的开始。要匹配 {,请使用 \{。 |
| | 指明两项之间的一个选择。要匹配 |
2、正则表达式的类摘要
- basic_regex类的作用主要是对正则表达式解析和编译,代码如下:
template<typename BidiIter>
struct basic_regex
{
basic_regex();
basic_regex(basic_regex const&);
regex_id_type regex_id() const; //唯一ID
std::size_t mark_count() const; //子表达式个数
void swap(basic_regex&);
static basic_regex; //
compilc(InputRange const& pat); //静态工厂函数
};
- match_results类的作用主要是保存正则表达式匹配的结果,代码如下:
template<typename BidiIter>
struct match_results
{
size_type size() const; //子表达式个数
bool empty() const; //空判断
template<typename Sub>
const_referrence operator[](Sub const& i) const //获取子表达式
};
- sub_match类是一个类似迭代器的对象,可以把它当做一个字符串的区间表示,代码如下:
template