C++正则表达式

正则表达式是什么

简单说,它就是用来匹配字符串,主要用在 Python 爬虫上,其实 C++ 也可以做爬虫,所以也会用到正则表达式,但是主要的使用还是在实际开发里。

正则表达式用法

下面的表格很清楚:

C++正则表达式_第1张图片

 三个主要函数

regex_match 将一个字符序列与正则表达式进行匹配,要求完全匹配,匹配成功返回true

regex_search 查找字符串是否包含子串,如果查找到立刻停止查找并返回true

regex_replace 将匹配到的所有子串替换为新的字符串

 用下面的表格更清楚些:

函数 功能
regex_match(s,re) 目标字符串s和正则表达式re是否完全匹配
regex_search(s,match_result,re) 目标字符串s是否存在某个子串与正则表达式re匹配
regex_replace(s,re,s1) 用s1替换目标字符串s中与正则表达式re匹配的子串

头文件

首先,我们要引入头文件,头文件名是 regex 。

#include

regex_match

这些函数和 Python 里的函数差不多,这个函数可以再你要判断目标字符串的全部是不是和你的要求一样。

用于匹配的函数是 std::regex_match

bool regex_match(string s,regex pattern)

bool regex_match(string s,smatch result,regex pattern)

bool regex_match(s.cbegin()+i,s.cend(),smatch result,regex pattern)

字符串 s 是要匹配的字符串,pattern 是匹配规则,也就是我上面那张图

定义方法如下

regex pattern("规则");

\d用法

\d表示 0~9 的任意一个数字

比如 abc\\d 表示匹配 abc 后面加 0-9 的任意一个数字。

因为在 C++ 里,一个 \ 代表的是字符串转义,所以我们的正则表达式转义要两个 \ ,所以是\\d。

C++正则表达式_第2张图片

 

#include
#include
using namespace std;
int main() 
{
	string n = "abc3";
	bool res = regex_match(n, regex("abc\\d"));
	cout << res << endl;
	return 0;
}

这段代码匹配了 abc 后面带任意一个 0-9 的数字的字符串,最后结果为 1 (true),代表符合匹配要求。

\D用法

注意,这里是大写的 D 。

这代表非数字,和上面的 \d 相反。

C++正则表达式_第3张图片

 

#include
#include
using namespace std;
int main() 
{
	string n = "abc3";
	bool res = regex_match(n, regex("abc\\D"));
	cout << res << endl;
	return 0;
}

最后运行结果为 0,因为 3 不是非数字。

\w用法

它代表任意一个大写或小写字母、数字或下划线。

C++正则表达式_第4张图片

 

\W的用法

大写W代表小写w相反,表示除大写或小写字母、数字或下划线的字符(包括空格)。

C++正则表达式_第5张图片

 

\s的用法

它代表匹配一个肉眼无法看见的符号,比如空格或 Tab。

C++正则表达式_第6张图片

 \S的用法

与\s相反,不是肉眼无法看见的符号。

C++正则表达式_第7张图片

 

.的用法

这是一个小数点,表示除了 \n 和 \r 以外的任何字符。

C++正则表达式_第8张图片

 

|的用法

表示或,表示满足任意一个条件即可

C++正则表达式_第9张图片

 

 

[]的用法

例如[abc]表示只要是abc中的一个就可以。

C++正则表达式_第10张图片

 

^的用法

例如[^abc]表示除abc外,其他字符都可以。

C++正则表达式_第11张图片

-的用法

例如 [1-9] 代表从1到9的任意一个字符。

C++正则表达式_第12张图片

^ -的用法

例如^1-9表示匹配除1-9之间的任意一个字符。

C++正则表达式_第13张图片

 

{}的用法

例如{n}表示匹配前面的表达式n次。

C++正则表达式_第14张图片

 

{,}的用法

例如{a,b}表示匹配前面的表达式最少a次,最多b次。

C++正则表达式_第15张图片

*的用法

匹配前面的表达式任意次。

regex_sreach用法

它和上面的 regex_match 有两个不同点:

1. 把函数名改成 regex_sreach

2. 匹配方式不同, sreach 是只要目标字符串里有子串符合要求就可以。

比如我们有 dabcf这样一个字符串,如果我们用 regex_match匹配abc,结果为0,当用sreach结果为1。

regex_replace用法

它可以替换匹配成功部分为指定数据。

比如我要把一个字符串里的 abc 换成123,可以用这个。

它和 regex_sreach也有两个不同点:

1. 函数名不同

2. 函数后面还有第三个参数,就是你的指定数据,比如上面的123,为 string 类型。

 

量词

*字符*要求字符出现0到多次 (*需要在一个字符后面,如果正则表达式第一个字符就是*,则会抛出异常)

+字符+要求字符出现1到多次

?字符?要求字符出现0次或1次

{n}字符{n}要求字符出现n次

{n,}字符{n,}要求字符出现n到多次

{n,m}字符{n,m}要求字符出现n到m次、

你可能感兴趣的:(c++,正则表达式,开发语言)