• 正则表达式实例学习


    学习正则表达式的最好方法是从例子开始,理解例子之后再自己对例子进行修改,实验。我觉得正则表达式很像大一时候学习的离散数学的,使用“与或非(&,|,^)”的逻辑表达式来抽象一段复杂的自然语言描述,从而解决一些逻辑分析问题。

    1.语法:


    2.实例

    当我们进入大学的时候,每个同学都会有一个学号(例如我的学号是201235010126)。在我们的大学,学号里面集中了年级,专业代码,班级代码,学生编号的种种信息,由此得到每一个同学唯一的ID号。今天这里采用专业年级的例子,由浅入深,讲解一个复杂表达式的来源。下面结合自己情况,以所在大学湖南大学保密专业为例,写一写学习正则表达式心得。

    学号编码规则:

    对201235010126来说:
    
    条件1:1-4位(2012)表示年号
    
    条件2:5-8位(3501)固定是专业号3501
    
    条件3:倒数第三位表示班级号,每个年纪有6个班级
    
    条件4:最后两位表示班级内学号,每个班有32人
    
    条件5:12级开始倒数第四位补0
    
    

    2.1实例一:匹配12级保密1班的学生。

    正则表达式是:

    /^2012350101(?:0[1-9]|[1-2]d|3[0-2])$/
    

    分析

    1."^"匹配开头,"$"匹配结尾,"|"表示或
    2.?:匹配pattern但不获取匹配结果,也就是说这是一个非获取匹配,不进行存储供以后使用。这在使用或字符“(|)”来组合一个模式的各个部分是很有用.
    3.学生学号是01-32,所以拆分成3组:
    a)01-09:0[1-9]
    b)10-29:[1-2]/d
    c)30-32:3[0-2]


    2.2实例二:匹配11级保密和12级保密班的全体学生。

    /^201(?:13501|235010)1(?:0[1-9]|[1-2]d|3[0-2])$/
    

    ?:是小括号的专利,因为小括号里面的是一组字符


    2.3实例三:匹配11级保密6个班和12级保密6个班的所有学生

    /^201(?:13501|235010)[1-6](?:0[1-9]|[1-2]d|3[0-2])$/
    

    ()表示把一些代码组合起来,[]表示把所有的字符组合起来


    2.4实例四:匹配2001-2019级的所有学生(假设每个年级6个班,其中2011为分界线,2012级开始倒数第四位补0)

    /^20(?:(?:0[1-9]|1[0-1])3501|1[2-9]35010)[1-6](?:0[1-9]|[1-2]d|3[0-2])$/
    

    分析##

    1.条件1-2规定了最后三位,也就是101-632,所以我们可以轻松想到1-6$这样可以匹配后三位,在这里面01 - 32可以分成3段:

      a)01-09:0[1-9]
      b)10-29:[1-2]/d
      c)30-32:3[0-2]
    

    2.然后我们看前面四位,由于特殊的年份是以11-12年分界的,所以我们说从第3位到倒数第4位都是特殊的,开头肯定是^20,然后里面根据情况可以分为补0的还是不补为的,所以可以得到(xxx3501|xxx35010),然后我们可以看到第一个XXX表示的是01-11,也即可以写成(?:0[1-9]|1[01]),第二个表示的是12-19,也即可以直接写成1[2-9],所以中间一部分是

    (?:(?:0[1-9]|1[01])3501|1[2-9]35010)
    

    3.最后:我们就可以得出一个看起来非常高大上的正则表达式了

     /^20(?:(?:0[1-9]|1[0-1])3501|1[2-9]35010)[1-6](?:0[1-9]|[1-2]d|3[0-2])$/
    
    

    终于把这个看似高大上的一串正则表达式匹配出来了,其实只要仔细罗列好条件,正则表达式就是xx的oo次的无限组合。O(∩_∩)O~ ~

  • 相关阅读:
    免费下载 80多种的微软推出入门级 .NET视频
    和付费网盘说再见,自己搭建个人网盘(Java 开源项目)
    JS惰性删除和定时删除可过期的localStorage缓存,或sessionStorage缓存
    docker——系列文章
    Bash 脚本教程
    Sublime text3里 修改TAB键为缩进为四个空格
    百度网盘不限速,直接获取直链
    技术党适合做浏览器首页的网站
    常用电脑软件
    有哪些开源的 Python 库让你相见恨晚?
  • 原文地址:https://www.cnblogs.com/QingFlye/p/4396809.html
Copyright © 2020-2023  润新知