- 一、分组例子示范
- 二、匹配ip示例
学好正则表达式对于处理字符串有着很强大的作用😲,本蒻苟👻发文介绍记录下正则表达式的学习,若有需要 后续会再补充相关知识点 or 应用例子,若有任何不足欢迎大佬门斧正~(^∀^●)ノシ
简单介绍: regex是C++11的库,是class std::basic_regex<>针对char类型的一个特化,默认使用ECMAScript文法
符号 | 意义 |
---|---|
^ | 匹配行的开头 |
$ | 匹配行的结尾,或用于引用分组 |
. | 匹配任意单个字符 |
[…] | 匹配 [ ] 中的任意一个字符 |
(…) | 设定分组 |
\ | 转义字符 |
\d | 匹配数字 [0-9] |
\D | 匹配数字 [0-9] 之外的数字 |
\w | 匹配字母 [a-z],数字,下划线 |
\W | 与 \w 所匹配的取反 |
\s | 匹配空格 |
\S | 与 \s 所匹配的取反 |
+ | 前面的元素重复 1 次或 多 次 |
* | 前面的元素重复 任意 次 |
? | 前面的元素重复 0 次或 1 次 |
{n} | 前面的元素重复 n 次 |
{n, } | 前面的元素重复至少 n 次 |
{n, m} | 前面的元素重复至少 n 次,至多 m 次 |
| | 逻辑或 |
#include
#include
using namespace std;
int main(){
char data[] = "001-Neo,002-Lucia";
regex reg("(\d+)-(\w+)");
// output: 001 name=Neo,002 name=Lucia
cout << regex_replace(data, reg, " name=");
}
二、匹配ip示例
#include
using namespace std;
int main() {
string ip("192.68.1.254 102.49.23.013 2.2.3.2 2.2.2.2 8.109.90.30");
cout << "原内容为:\n" << ip << endl;
// 1. 位数对齐
ip = regex_replace(ip, regex("(\d+)"), "00");
cout << "位数对齐后为:\n" << ip << endl;
// 2. 有0的去掉
ip = regex_replace(ip, regex("0*(\d{3})"), "");
cout << "去掉0后为:\n" << ip << endl;
// 3. 取出IP
regex reg("\s");
sregex_token_iterator pos(ip.begin(), ip.end(), reg, -1);
decltype(pos) end;
//string按字典序排序
set<string> ip_set;
for (; pos != end; ++pos)
ip_set.insert(pos->str());
cout << "------\n最终结果:\n";
// 4. 输出排序后的数组
for (auto elem : ip_set)
{
// 5. 去掉多余的0
cout << regex_replace(elem,
regex("0*(\d+)"), "") << endl;
}
return 0;
}
路漫漫其修远兮,吾将上下而求索
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)