浅谈C++的regex库

正文索引 [隐藏]

写在前面:

第四届CCCC团体程序设计天梯赛结束之后,知乎热榜出现了这个问题“如何评价第四届CCCC团体程序设计天梯赛”,这里面有些回答真的看得我笑出声,比如这个简简单单的回答:“第四届CCCC字符串大赛”。

L1部分的的确确地考察了大量的字符串操作(小声哔哔:考这么多字符串就算了 关键是还不给我用Python),但是并不能说这次天梯赛的题偏向了Java选手,也不能说这么多字符串操作对于C++玩家不太友好,我只能够说是因为我太菜了。

很多队伍都是没满800分死磕第8题,然后突然收到通知说改规则了:800分破例降到600分即可解锁L2的得分。好了,说多了都是泪,下面浅谈一下C++的regex库的常用函数和基本语法规则。

常用函数:

regex_match:全文匹配,要求整个字符串符合正则表达式的匹配规则。用来判断一个字符串和一个正则表达式是否模式匹配,如果匹配成功则返回true,否则返回false

regex_search:搜索匹配,根据正则表达式来搜索字符串中是否存在符合规则的子字符串。

regex_replace:替换匹配,即可以将符合匹配规则的子字符串替换为其他字符串。要求输入一个正则表达式,以及一个用于替换匹配子字符串的格式化字符串。这个格式化字符串可以通过转义序列引用匹配子字符串中的部分内容。

语法规则:

1. \ 表示将下一字符标记为特殊字符、转义字符;

2. ^ 表示字符串的开始,匹配输入字符串开始的位置;

3. ^$ 表示字符串的结尾,匹配输入字符串结尾的位置;

4. . 表示匹配除换行符” \n “以外的任意字符;

5. \w 表示任意字母、数字、下划线 ;

6. \s 表示任意空白符(tab也包含在内);

7. \d 表示匹配单个数字字符,\D 表示非数字字符匹配;

8. [] 表示一个字符集合,匹配指定范围内的任何字符,例如[a-z]表示字母a~z所组成的集合;

9. []中使用^来表示集合的补集,匹配不在指定的范围内的任何字符,例如[^1-3]表示除1 2 3以外数字;

10. [[:alpha:]] 表示任何字母;

11. [[:alnum:]] 表示任何字母和数字;

12. regex::icase 表示匹配时忽略大小写;

13. {n} 表示正好匹配 n 次前面的字符或表达式,例如”hello{6}”,匹配字符串中符合第二个l后边有6个o的子字符串;

14. {n, } 表示至少匹配 n 次前面的字符或表达式;

15. {n,m} 表示匹配至少 n 次,至多 m 次前面的字符或表达式;

16. * 表示零次或多次匹配前面的字符或子表达式,等效于{0, };

17. + 表示一次或多次匹配前面的字符或子表达式;

18. ? 表示零次或一次匹配前面的字符或子表达式;

19. \t \n \r这些平时非常常见,分别表示制表符匹配、换行符匹配、回车符匹配。

相关习题:

点击题目即可跳转。

【GPLT】L1-058 6翻了

【GPLT】L1-059 敲笨钟