1. 正则表达式 (regular expression)
一种描述字符序列的方法
| 组件 | 解释 |
|---|---|
| regex | 表示一个正则表达式的类 |
| regex_match | 将一个字符序列与一个正则表达式匹配 |
| regex_search | 寻找第一个与正则表达式匹配的子序列 |
| regex_replace | 使用给定格式替换一个正则表达式 |
| sregex_iterator | 迭代器适配器,调用regex_searcg来遍历一个string中所有匹配的子串 |
| smatch | 容器类,保存在string中搜索的结果 |
| ssub_match | string中匹配的子表达式的结果 |
regex_match和regex_search的参数:
操作会返回bool值,指出是否找到匹配。
| 操作 | 解释 |
|---|---|
| (seq, m, r, mft) | 在字符序列seq中查找regex对象r中的正则表达式。seq可以是一个string、标识范围的一对迭代器、一个指向空字符结尾的字符数组的指针。 |
| (seq, r, mft) | m是一个match对象,用来保存匹配结果的相关细节。m和seq必须具有兼容的类型。mft是一个可选的regex_constants::match_flag_type值。 |
1.1 例子
查找违反众所周知的拼写规则 “i除非在 c 之后,否则必须在 e 之前” 的单词
//查找不在字符c之后的字符串ei
string pattern("[^c]ei");
//包含pattern的整个单词
pattern = "[[:alpha:]]*" + pattern + "[[:alpha:]]*";
regex r(pattern); //构造一个有查找模式的regex
smatch results; //定义一个对象保存搜索结果
//定义一个string保存与模式匹配和不匹配的文本
string test_str = "receipt freind thief receive";
//用r在test_str中查找与pattern匹配的子串
if (regex_search(test_str, results, r)) //如果有匹配子串
cout << results.str() << endl; //打印匹配的单词
输出结果为:
freind



