🍿*★,°*:.☆( ̄▽ ̄)/$:*.°★* 🍿 💥💥💥欢迎来到🤞汤姆🤞的csdn博文💥💥💥 💟💟喜欢的朋友可以关注一下,下次更新不迷路💟💟 😆😆😆私聊获取个人订阅号哦,欢迎订阅共同学习😆😆😆 💖💖💖💖可以加入大家庭群聊,一起学习天天有福利💖💖💖💖
🍬本文摘要
经常听说大厂的面试让手写正则表达式,这篇文章给想要专门学习正则表达式怎么写的小伙伴提供的文章,建议看完例子之后,自己手敲一下正则表达式的书写,你会发现这东西还挺简单的,不难!加油学!
目录
- 🍬本文摘要
- 😉一、正则表达式的概念
- 🧊文章总结
😉一、正则表达式的概念
正则表达式(Regular Expression,常简写为regex、regexp或RE)。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。C++11开始支持正则表达式。
正则表达式非常强大,具体的实现算法有差异,所以会有多种实现方式。C++11支持6种正则表达式引擎。ECMAScript 是其中支持最多元素的引擎,也是regex默认支持的引擎。
- ECMAScript
- basic(POSIX Basic Regular Expressions)
- extended(POSIX Extended Regular Expressions )
- awk(POSIX awk)
- grep(POSIX grep )
- egrep(POSIX grep –E)
正则表达式主要两部分构成,特殊字符和普通字符。
字符 | 描述 |
---|---|
\ | 转义字符 |
$ | 匹配字符行尾 |
* | 匹配前面的子表达式任意多次 |
+ | 匹配前面的子表达式一次或多次 |
? | 匹配前面的子表达式零次或一次 |
{m} | 匹配确定的m次 |
{m,} | 匹配至少m次 |
{m,n} | {m,n} |
. | 匹配任意字符 |
x | y |
[xyz] | 字符集合,匹配包含的任意一个字符 |
[^xyz] | 匹配未包含的任意字符 |
[a-z] | 字符范围,匹配指定范围内的任意字符 |
[^a-z] | 匹配任何不在指定范围内的任意字符 |
字符 | 描述 |
---|---|
\w | 匹配字母或数字或下划线,任意一个字母或数字或下划线,即AZ,az,0~9,_中任意一个 |
\W | 匹配任意不是字母、数字、下划线的字符 |
\s | 匹配任意的空白符,包括空格、制表符、换页符等空白字符的其中任意一个,与”[ \f\n\r\t\v]”等效 |
\S | 匹配任意不是空白符的字符,与”[^\f\n\r\t\v]”等效 |
\d | 匹配数字,任意一个数字,0~9中的任意一个,等效于”[0-9]” |
\D | 匹配任意非数字的字符,等效于”[^0-9]” |
\b | 匹配一个字边界,即字与空格间的位置,也就是单词和空格之间的位置,不匹配任何字符,如,“er\b"匹配"never"中的"er”,但不匹配"verb"中的"er" |
\B | 非字边界匹配,“er\B"匹配"verb"中的"er”,但不匹配"never"中的"er" |
\f | 匹配一个换页符,等价于”\x0c”和”\cL” |
\n | 匹配一个换行符,等价于”\x0a”和”\cJ” |
\r | 匹配一个回车符,等价于”\x0d”和”\cM” |
\t | 匹配一个制表符,等价于”\x09”和”\cI” |
\v | 匹配一个垂直制表符,等价于”\x0b”和”\cK” |
\cx | 匹配”x”指示的控制字符,如,\cM匹配Control-M或回车符,”x”的值必须在”A-Z”或”a-z”之间,如果不是这样,则假定c就是"c"字符本身 |
regex_match
全文匹配,即要求整个字符串符合匹配规则,返回true或false
#include "iostream"
#include "regex"
using namespace std;
int main() {
std::string str="1111-1";
cout<<std::regex_match(str,regex("\\d{4}-\\d{1,2}"))<<endl;//匹配”四个数字-一个或两个数字“,返回值为1匹配成功
str="1320550505@qq.com";
cout<<regex_match(str,regex("\\d{1,}@qq.com"))<<endl;//匹配”QQ邮箱“,返回值为1匹配成功
return 0;
}
regex_search
搜索匹配,即搜索字符串中存在符合规则的子字符串。
#include "iostream"
#include "regex"
using namespace std;
int main() {
string str= "hello2019-02-03word";
smatch match;
regex regex1("(\\d{4})-(\\d{1,2})-(\\d{1,2})");//搜索规则()表示把内容拿出来,不加()的话只有match[0],没有[1][2][3]
std::cout<<regex_search(str,match,regex1);//找到了返回1
std::cout<<match[0];//2019-02-03
std::cout<<match[1];//2019
std::cout<<match[2];//02
std::cout<<match[3];//03
return 0;
}
#include "iostream"
#include "regex"
using namespace std;
int main() {
string str = "hello2019-02-03word,hello2019-02-03word,hello2019-02-03word ";
smatch match;
regex regex1("(\\d{4})-(\\d{1,2})-(\\d{1,2})");//搜索规则()表示把内容拿出来,不加()的话只有match[0],没有[1][2][3]
string::const_iterator citer = str.cbegin();
while (regex_search(citer, str.cend(), match, regex1)) {
citer = match[0].second;//将迭代器的指针指向匹配到的字符串后面的位置
for (size_t i = 1; i < match.size(); i++) {
cout << match[i] << " ";//把三个括号里面的内容拿出来
}
cout << endl;
}
return 0;
}
regex_replace
替换匹配,即可以将符合匹配规则的子字符串替换为其他字符串。
#include "iostream"
#include "regex"
using namespace std;
int main() {
string str = "hello2019-02-03word,hello2019-02-03word,hello2019-02-03word";
regex regex1("-");
cout << regex_replace(str, regex1, "/") << endl;//hello2019/02/03word,hello2019/02/03word,hello2019/02/03word,函数的返回值就是代替之后的结果
return 0;
}
🧊文章总结
提示:这里对文章进行总结:
本文讲了关于正则表达式的书写,自己写一遍就会发现很简单,学到就是赚到
更多好文推荐
🍸2021-4月Python 机器学习——中文新闻文本标题分类
🍹2021年4月-(计算机网络)小型校园网络模拟搭建,最全最准确版
🍺2022-10-31-基于用户的协同过滤推荐算法实现+MAE+RMSE
🍻2022-11-28-大数据可视化,特征维度大于50
🥂2023-3-9-一篇简短的文章把C++左右值关系讲的透透彻彻
上一篇 |
End
| 下一篇 |