正则表达式 C++11

正则表达式 C++11,第1张

正则表达式应用
  • 一、分组例子示范
  • 二、匹配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;
}


路漫漫其修远兮,吾将上下而求索

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/662321.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-18
下一篇 2022-04-18

发表评论

登录后才能评论

评论列表(0条)

保存