码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • c++ 正则表达式的若干难查问题


    1.关于正则表达式中 | 的使用方法

    字母的结合顺序要大于逻辑或"|"的优先级,如下这个模式,能匹配f或者good

    regex("f|good");

    如果要匹配food或者good,那么就要给f,g加上括号:

    regex("(f|g)ood");

    2.

    运算符描述
    \转义符
    (), (?:), (?=), []圆括号和方括号
    *, +, ?, {n}, {n,}, {n,m}限定符
    ^, $, \任何元字符、任何字符定位点和序列(即:位置和顺序)
    |替换,"或"操作
    字符具有高于替换运算符的优先级,使得"m|food"匹配"m"或"food"。若要匹配"mood"或"food",请使用括号创建子表达式,从而产生"(m|f)ood"。

    3.这里举一个看起来稍微复杂点的例子

    regex("0|[1-9]+[0-9]{1,}|0\\.\\d{1,}|[1-9]{1,}\\d{0,}\\.+\\d{1,}");

    如下顺序来解读:

    (1)首先低一点,| 是这个式子中优先顺序最后的,所以这个式子包含如下三个匹配式子:

    第一个:0  ,这个没什么好说的,就匹配数0  。

    第二个:[1-9]+[0-9]{0,}   ,这个也好理解,匹配首位非0的至少2位的整数

    第三个:0\\.\\d{1,}   ,这个匹配纯小数,也就是整数部分是0的小数。

    第四个:[1-9]{1,}\\d{0,}\\.+\\d{1,} ,这个匹配整数部分非0的小数

    这个地方是常用的正则表达式汇总

    https://blog.csdn.net/digitalkee/article/details/126452730?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22126452730%22%2C%22source%22%3A%22digitalkee%22%7D

    再来一个例子:

    1. #include <string>
    2. #include <regex>
    3. #include <iostream>
    4. using namespace std;
    5. int main()
    6. {
    7. string str = "hello2012-6-12world!!!!!";
    8. smatch match;
    9. regex pattern("(\\d{4})-(\\d{1,2})-(\\d{1,2})");
    10. if (regex_search(str,match,pattern))
    11. {
    12. c
    13. for (size_t i = 1; i < match.size(); ++i)
    14. {
    15. cout << match[i] << endl;
    16. }
    17. }
    18. return 0;
    19. }

    下面来详细解读:

    (1)match.size(),返回一个模式的子表达式数量。模式中每个()里的部分,都代表正则表达式中的一个子表达式,模式本身也是一个子表达式,即如果模式中没有(),那么match.size()返回1,因为只本身一个子表达式。如果还有2对(),那么match.size(),应该返回3,因为又增加了2个子表达式。

    (2)对于例,match.size()值是4,因为有三对(),每对()里面的部分都是一个子表达式。加上本身,一共有4个子表达式,所以match.size()的值是4.

    (3)match[i],表示string匹配的子表达式的结果。可以直接和string对象比较。真是个奇怪的对象。

  • 相关阅读:
    Effective Modern C++[实践]->理解decltype
    「避坑宝典」为大家分享笔者在22 年所遇到“匪夷所思”的 Bug 趣事
    设计模式—创建型模式之建造者模式
    码神之路项目总结(一)
    Maven Jetty运行Spring MVC项目
    如何在IDEA中配置指定JDK版本?轻松解决!!!
    【Python】Pyside6简易版教程
    I2C 子系统(二):I3C spec
    吃透SpringBoo的这些t知识,你就已经超过90%的Java面试者了
    一个简单的HTML网页 个人网站设计与实现 HTML+CSS+JavaScript自适应个人相册展示留言博客模板
  • 原文地址:https://blog.csdn.net/digitalkee/article/details/126452043
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号