• 全网最易懂的正则表达式教程(4)- 范围


    正则详细教程系列可以看此链接的文章哦

    https://www.cnblogs.com/poloyy/category/1796055.html

    范围

    代码/语法说明
    分支条件,或
    [...] 字符集合,多选一
    [a-z] 指定范围的字符集合
    [^...] 取反的字符集合

      

    [...] 字符集合介绍

    背景

    要想匹配数字,字母,空白是很简单的,因为已经有了对应这些字符集合的元字符,但是如果你想匹配没有预定义元字符的字符集合(比如:元音字母 a,e,i,o,u )

    解决方案 

    很简单,你只需要在方括号 [ ]  里列出它们就行了,像 [aeiou] 匹配任何一个英文元音字母, [.?!] 匹配任一个标点符号

    重点

     [...]  里面写再多的字符集合,最终也只会匹配一个字符,和元字符一样,如果需要重复匹配需要加上限定符

    元字符等价的字符集合

    元字符等价语法
    w [a-zA-Z0-9_] 
    W [^a-zA-Z0-9_] 
    s [ f] 
    S [^ f] 
    d [0-9]
    D [^0-9]

      

    [...] 的栗子一

    正则表达式

     (?0d{2}[) -]?d{8} 

    分析:

    1. 首先是一个转义字符  (  ,它能出现 0 次或 1 次  ? 
    2. 然后是一个 0,后面跟着2个数字 d{2}
    3. 然后是 ) 或 - 或空格中的一个,它出现 0 次或 1 次  ? 
    4. 最后是 8 个数字 d{8}

    可匹配到的字符串

    • (010)88886666
    • 022-22334455
    • 02912345678

    [...] 的栗子二

    正则表达式

    [123aA;] 

    可匹配到的字符串

    只能匹配 [ ] 里面的字符

    指定范围的 [...] 的栗子一

    正则表达式

     [u4e00-u9fa5]

    可匹配到的字符串

    任意中文字符

    指定范围的 [...] 的栗子二

    正则表达式

     ^d[a-gA-Z5-9]{2,4} 

    分析:

    1. 数字开头
    2. a-g 或 A-Z 或 5-9 任取2-4位
    3. 表达式可以等价成: ^[0-9][a-gA-Z5-9]{2,4} 

    可匹配到的字符串

    • 6aY
    • 6aY7
    • 6aY78
    • 1aY781

    [^...] 的栗子

    正则表达式

     [^abcdA-Z()-=]

    分析:

    可以匹配非 a、b、c、d、A-Z、( 、) 、- 、= 以外的字符

    可匹配到的字符串

    • e
    • f
    • [

    指定范围的 [...] 总结

    •  [a-z] 如果是有指定范围字符集的话,必须按照 ASCII 码的顺序
    •  [...] 只能匹配一个字符,除非加了量词(限定符)

    | 分支条件的栗子一

    正则表达式

     ab|cd|123|.{2} 

    可匹配到的字符串

    • ab
    • cd
    • 123
    • 菠萝

    | 分支条件的栗子二

    正则表达式

     0d{2}-d{8}|0d{3}-d{7} 

    可匹配到的字符串

    • 012-81200111
    • 0333-8120011

    | 分支条件的栗子三

    两个正则表达式的区别

     d{5}-d{4}|d{5} :可以匹配 5 位数字 或 5位数字 - 4位数字

     d{5}|d{5}-d{4} :只能匹配 5 位数字

    是否有个疑问

    明明表达式差不多一样啊,只是前后位置换了下而已,为啥第二种写法只能匹配 5 位数字呢?

    答案

    • 因为第二种写法,如果满足 d{5}-d{4} ,那肯定也满足 d{5} 
    • 匹配分支条件时,将会从左到右地测试每个条件,如果满足了某个分支条件的话,就不会再去匹配后面的分支了
    • 所以d{5}能匹配上,就不再去测试 d{5}-d{4} 是否匹配了
  • 相关阅读:
    一提黄金肯定就是西方的货币史
    封装QtCore(在非Qt项目里使用QString,QJson,QFileInfo,QFile等类)
    Qt 自定义事件(三种方法:继承QEvent,然后Send Post就都可以了,也可以覆盖customEvent函数,也可覆盖event()函数)
    MAC 设置环境变量path的几种方法
    深入Qt 学习 -- 反射机制(比较简单清楚)
    排序
    寄存器,cache、伙伴系统、内存碎片、段式页式存储管理
    NET Core项目
    消息队列
    RedisHelper
  • 原文地址:https://www.cnblogs.com/poloyy/p/13212189.html
Copyright © 2020-2023  润新知