当前位置: 首页 > news >正文

wip: 正则regex

面向自己的一个文章,问题并没有完全解决,整体待补充

0 - 背景

如果是单纯使用的话,让ai写regex在给出解释自己检查一遍,感觉已经非常成熟和靠谱了,针对的是在一些字符串模拟类的题目的情况下,如果模拟要写一堆,写regex的话只有几行的情况

可能是因为初学的缘故,其实觉得写regex有点抽象,只用里面的最最基本的规则,正则的匹配可能会被我写的非常长,这个单字符串很难看出是否是合法的括号匹配,也很难看出哪些转义字符被计算机当做了一个字母

比如leetcode 65.有效数字,我把匹配串写成了"(^(((-|\+)?[0-9]+)|((-|\+)?(([0-9]+\.?[0-9]*)|(\.[0-9]+)))|((((-|\+)?[0-9]+)|((-|\+)?(([0-9]+\.[0-9]*)|(\.[0-9]+))))(e|E)((-|\+)?[0-9]+)))$)", 这个能过,但前期过程中遇到了括号不匹配的报错,但实际上只是少加了一个转义的斜杠,非常难以debug,违背了减少工作量的初衷

  1. 可以直接借助在线网站(如regex101.com)来检查

  2. python支持VERBOSE,可以编写带注释的正则表达式,例如,一个匹配电子邮件的正则表达式可以写成:

    pattern = re.compile(r"""^                   # 开始[\w\.-]+            # 用户名,可以包含字母、数字、点、破折号@                   # @符号[\w\.-]+            # 域名\.                  # 点[a-zA-Z]{2,4}       # 顶级域名,2到4个字母$                   # 结束
    """, re.VERBOSE)
    

    但c++不行,只能写成一整个字符串的方式

普通字符串需要双反斜杠,使用原始字符串在一定程度上缓解了转义问题

1 - 基本规则

语法

  • 特殊字符(需要转义)

    . * + ? ^ $ | ( ) [ ] { } \

  • 字符类:
    [abc] 匹配a、b或c
    [^abc] 匹配除a、b、c外的任何字符
    [a-z] 匹配a到z之间的字符
    \d 匹配数字,等同于[0-9]
    \w 匹配字母、数字或下划线,等同于[a-zA-Z0-9_]
    \s 匹配空白字符(空格、制表符等)

  • 重复

    * 0次或1次
    + 1次或多次
    ? 0次或1次
    {n} 恰好n次
    {n,} 至少n次
    {n,m} n到m次

  • 锚点:
    ^ 字符串开始(或在字符类中表示取反)
    $ 字符串结束

  • 分组和捕获:
    (exp) 匹配exp并捕获到组中
    (?:exp) 匹配exp但不捕获

  • 基本函数

    std::regex_match()    // 完全匹配
    std::regex_search()   // 搜索匹配
    std::regex_replace()  // 替换匹配内容
    

例子

std::string str = "hello123";
std::regex r("^[a-z]+\\d+$");
if (std::regex_match(str, r)) {// 匹配成功
}

2 - 避免编译问题

  1. 一点点规则开始加,中途就进行编译

  2. 看到c++ 20有format,其实可以把很长的规则拆成好几部分拼成一个大字符串,或者在或的规则处进行截断,分别得到匹配结果然后进行整合

    std::string name = "Alice";
    int unreadMessages = 3;// 使用大括号 {} 作为占位符
    auto message = std::format("Hello {}, you have {} new messages.", name, unreadMessages);
    
http://www.dtcms.com/a/443192.html

相关文章:

  • 一个网站建设花了10万元永久免费网站
  • 139、【OS】【Nuttx】【周边】效果呈现方案解析:strace 日志解析(五)
  • 阿里云网站建设合作广告传媒公司业务
  • 购物网站建设 成都番禺网站建设技术
  • 网站双线主机优势wordpress降版本
  • YOLO入门教程(番外):卷积神经网络—多输入多输出通道
  • 证券网站开发数码印花图案设计网站
  • 建模布线7 三四五连接4
  • 建设网站所有步骤广州公司网站设计
  • 做的网站为什么看不到图片导视设计案例
  • 廊坊短视频优化公司优化营商环境个人心得
  • 【Docker项目实战】使用Docker部署WikiDocs文档管理工具
  • 学校网站 建设措施设计公司企业标志
  • 专业网站建设特点分析企业网站源码带后台
  • volatile解决了什么问题,底层原理是什么
  • 太原市手机网站建设服务平台app下载
  • 东莞做网站排名网站建设的风险
  • 汕头网站时优化宿迁集团网站建设
  • 网站开发的就业前景如何小白学做搭建网站
  • 知识图谱(Knowledge Graph)详解
  • 专门做外链的网站手机怎么免费建网站
  • 【Unity】HybridCLR:原生C#热更新革命
  • TomcatHttp协议
  • JavaScript 数组元素移动至特定索引位置
  • 怎么学做淘宝电商网站沈阳网站建设方案服务
  • 沧州海外网站建设广告联盟怎么做
  • 专业模板建站服务网站维护有多长时间
  • 红黑树动画演示
  • 当“技能拼装”遇上“多智能体协奏”——Microsoft Agent Framework 与 Semantic Kernel 全维度深度拆解与实战指南
  • 那些网站可以做淘宝店铺推广wordpress 平台