【C++11】regex正则表达式

    技术2025-08-29  8

    无聊写简单题的时候顺便学了一下这个强大的工具。

    常用函数: regex_match:全文匹配,要求整个字符串符合正则表达式的匹配规则。用来判断一个字符串和一个正则表达式是否模式匹配,如果匹配成功则返回true,否则返回false。 regex_search:搜索匹配,根据正则表达式来搜索字符串中是否存在符合规则的子字符串。 regex_replace:替换匹配,即可以将符合匹配规则的子字符串替换为其他字符串。要求输入一个正则表达式,以及一个用于替换匹配子字符串的格式化字符串。这个格式化字符串可以通过转义序列引用匹配子字符串中的部分内容。

    语法规则:

    \ 表示将下一字符标记为特殊字符、转义字符;^ 表示字符串的开始,匹配输入字符串开始的位置;^$ 表示字符串的结尾,匹配输入字符串结尾的位置;. 表示匹配除换行符” \n “以外的任意字符;\w 表示任意字母、数字、下划线 ;\s 表示任意空白符(tab也包含在内);\d 表示匹配单个数字字符,\D 表示非数字字符匹配;[] 表示一个字符集合,匹配指定范围内的任何字符,例如[a-z]表示字母a~z所组成的集合;[]中使用来表示集合的补集,匹配不在指定的范围内的任何字符,例如[1-3]表示除1 2 3以外数字;[[:alpha:]] 表示任何字母;[[:alnum:]] 表示任何字母和数字;regex::icase 表示匹配时忽略大小写;{n} 表示正好匹配 n 次前面的字符或表达式,例如”hello{6}”,匹配字符串中符合第二个l后边有6个o的子字符串;{n,} 表示至少匹配 n 次前面的字符或表达式;{n,m} 表示匹配至少 n 次,至多 m 次前面的字符或表达式;* 表示零次或多次匹配前面的字符或子表达式,等效于{0,};+ 表示一次或多次匹配前面的字符或子表达式;? 表示零次或一次匹配前面的字符或子表达式;\t \n \r这些平时非常常见,分别表示制表符匹配、换行符匹配、回车符匹配。 原文链接:https://blog.csdn.net/weixin_42449444/article/details/89022191 https://ac.nowcoder.com/acm/contest/4462/J 写这题的时候发现+无效,改成{1,}就好了。 int main() { regex reg("[0-9]{1,}[+][0-9]{1,}"); string s; bool is; int t; cin >> t; while (t--){ cin >> s; is = regex_match(s, reg); if (is){ int p = s.find("+"); cout << add(s.substr(0, p), s.substr(p + 1, s.size() - p)) << endl; } else cout << "skipped" << endl; } return 0; }
    Processed: 0.018, SQL: 9