• C++正则表达式


    Python正则表达式

    之前写过一篇关于 Python 正则表达式的 blog ,链接:(392条消息) Python正则表达式(一看就懂)_YR_T的博客-CSDN博客_python正则表达式

    正则表达式是什么

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

    进入正题,正则表达式用法

    头文件

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

    #include

    regex_match

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

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

    1. bool regex_match(string s,regex pattern)
    2. bool regex_match(string s,smatch result,regex pattern)
    3. 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。

    d8e5a8d7203f42c79a65d9c7b14998e8.png

    1. #include
    2. #include
    3. using namespace std;
    4. int main() {
    5. string n = "abc3";
    6. bool res = regex_match(n, regex("abc\\d"));
    7. cout << res << endl;
    8. return 0;
    9. }

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

    \D用法

    注意,这里是大写的 D 。

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

    bd4e15a8db434467bce4fabbe43bf73a.png

    1. #include
    2. #include
    3. using namespace std;
    4. int main() {
    5. string n = "abc3";
    6. bool res = regex_match(n, regex("abc\\D"));
    7. cout << res << endl;
    8. return 0;
    9. }

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

    \w用法

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

    d6e7424a005d4930bf381b17ec17c80b.png

    这段代码结果是1,因为3是数字。

    5462720a7bcb4405b38f289eb27d1aca.png 

    这段代码的运行结果也是1。

    \W的用法

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

    8d79b06755aa452c8a6f45e6ac20a5b6.png

    这段代码运行结果为1,因为我在abc后面加了一个空格。

     \s的用法

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

    618812eb829f4ee08166098bf6c6b0cb.png

    因为我在abc后面加了1,所以结果为0。

     \S的用法

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

    a2233aba6ff0417a9a46c442f711919e.png

    它的结果也是1。

     .的用法

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

    e5d8e734fe82484f833c5bc6b56796b1.png

    四个小数点表示四个任意字符,所以结果为1。

     |的用法

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

    494aa79782774dbe85fd3cfb6258febe.png

     结果为1,符合第一个条件。

    注意,如果前后都有其他字符,要用小括号 ( ) 把 | 语句包裹起来。

    []的用法

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

    437886ecf626490297efd30d62e35c5e.png 

    结果为1,因为w在we1中。

    ^的用法

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

    ee4a134ff40041f09e8dcb3afce0eaa1.png结果是0,因为加了 ^。

     -的用法

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

    155c06d63b884255a7710cae3e4e2a98.png

    结果为1。

    ^ -的用法

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

    18ef3251d23c490fb11c19dc109e363d.png

    结果为1。因为6不再1-5的范围内。

    {}的用法

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

    a6928a7f856645fa8bab2bdb827d4aa6.png 

    结果为1。

    {,}的用法

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

    4a4a57c6cb984f3bae9353371ce88c09.png 

    结果为1,匹配1次。

    *的用法

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

    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 类型。

    最后

    我自己觉得真的很详细了(超级自恋),如果有不正确请在评论区指正,有问题也可以在评论区问。

     

     

     

     

     

     

     

     

  • 相关阅读:
    善用 vscode 的多光标批量和模板等技巧来提效
    最后一篇博客
    办公软件入门--word01
    Kubernetes学习笔记【2年以前的笔记】
    pt29django教程
    ChatGLM3 本地部署的解决方案
    Django学习的第三课 (争取后续写完一套学习Django的笔记)
    写给小白的开源编译器
    Vue3基础知识-1
    关于ENVI遥感影像的hdr元数据信息设置与读取(C++ 、Python)
  • 原文地址:https://blog.csdn.net/m0_64036070/article/details/126594231