• 正则表达式


    一、正则表达式的基本语法和规则

    1.备选字符集:无论备选字符集包含多少字符, 必须-只能选1个

    例如:

            6位数字的密码

            [0123456789][0123456789][0123456789][0123456789][0123456789][0123456789]

            简化:可用-表示范围的区间: [0-9][0-9][0-9][0-9][0-9][0-9]

    (1) [0-9]: 0~9其中一个

    (2) [a-z]:1位小写字母

    (3) [A-Z]:1位大写字母

    (4) [A-Za-z]:1位字母,大小写都行

    (5) [0-9a-zA-Z]:1位字母或数字都行

    (6) [^不能选的字符列表]:反选 

            例如:[^7] 不能选择7

    2. 预定义字符集:为常用的字符集专门提供的简化写法!

    (1)  \d == [0-9]:1位数字

    (2)  \w == [0-9a-zA-Z_]:1位字母,数字或_

    (3) \s:1位空字符,匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。

    (4)  . : 除换行回车外的任何一个字符,如: "a.[0-9]":表示一个字符串有一个"a"后面跟着一个

                  任意字符和一个数字;

    (5) \t:匹配一个制表符  

    3.预定义字符的反义:预定义字符的大写形式都是小写的反义

    (1)  \D:1位非数字字符

    (2)  \S:匹配任何非空白字符。等价于 [^\f\n\r\t\v]

    (3)  \v:匹配一个垂直制表符

    (4)  \n:匹配一个换行符

    (5)  \r:匹配一个回车符

     4. 数量词:规定相邻的字符集可出现的次数

    确定数量:3种

    (1)  {n}:必须反复出现n位

    (2)  {n,m}:最少出现n次,最多出现m次

    (3)  {n,}:至少出现n次,多了不限

     案例:

            ①:/^\d{6}$/:6位数字

            ②:手机号规则:

                    第1位:只能是1

                    第2位:[34578]

                    第3位之后,必须是9位数字

                    手机号:/^1[34578]\d{9}$/

     不确定数量:3种:

    (4)  *: 有没有都行,次数不限,相当于{0,}

    (5)  +:至少1次,重复次数不限,相当于{1,}

    (6)  ?:有没有都行,最多1次,相当于{0,1}

    (7)  ():分组

    案例:

            身份证号逻辑:

                    前15位数字

                    16,17位必须是数字

                    最后一位可以是数字或X x

                    后三位 可有可无,如果有,只能出现一次

                    \d{15}(\d\d[0-9Xx])?

    (8)   |:左右两正则表达式选其一

    案例:

            手机号:

                    手机号前可能出现+86或0086。

                    前缀可有可无,且只能出现一次

                    前缀和手机号之间可以有或没有任意个空字符 

                第1位:只能是1

                    第2位:[34578]

                    第3位之后,必须是9位数字

                  手机号:

                  (\+86|0086)?\s*1[34578]\d{9}

    5. 指定匹配位置

    (1)  ^表达式:必须以表达式开头

    案例:

            比如:选择字符串开头的空格?^\s*

    (2)  表达式$:  必须以表达式结尾

             选择结尾空格?\s*$

            选择开头或结尾的空格?^\s*|\s*$

    (3)*预告:今后只要在程序中执行验证:都要前加^后加$*

    比如:

           ^\d{6}$——从头到尾必须只能是6位数字

           1234567

    6.预判: 在正式匹配正则表达式之前,先预读整个字符串,进行初步匹配,如果预判都未通过,则不再验证!

    (1)  (?=表达式): 先浏览字符串是否满足表达式的要求

    案例:

             比如:2位数字,但不能包含4和7       (?=[^47]$) 

    (2)  (?!表达式):先检查字符串是否不满足表达式要求

     案例: 

            比如:不能都由小写字母和数字组成:    (?![a-z0-9]+$)

    7.特殊字符

    (1)  $:匹配输入字符串的结尾位置。

    (2)  (): 标记一个子表达式的开始和结束位置。

    (3)  *:匹配前面的子表达式零次或多次。要匹配 * 字符,请使用 \*。

    (4)  +:匹配前面的子表达式一次或多次。要匹配 + 字符,请使用 \+。

    (5)  .: 匹配除换行符 \n之外的任何单字符。要匹配 .,请使用 \.。

    (6)  [: 标记一个中括号表达式的开始。要匹配 [,请使用 \[。

    (7)  ?: 匹配前面的子表达式零次或一次,或指明一个非贪婪限定符。要匹配 ? 字符,请使用 \?。

    (8)  \:将下一个字符标记为或特殊字符、或原义字符、或向后引用、或八进制转义符。例如, 'n' 匹配字符 'n'。'\n' 匹配换行符。序列 '\\' 匹配 "\",而 '\(' 则匹配 "(".

    (9)  ^: 匹配输入字符串的开始位置,除非在方括号表达式中使用,此时它表示不接受该字符集合。要匹配 ^ 字符本身,请使用 \^。

    (10)  {: 标记限定符表达式的开始。要匹配 {,请使用 \{。

    (11)  |: 指明两项之间的一个选择。要匹配 |,请使用 \|。

  • 相关阅读:
    SIM800C连接OneNet平台HTTP协议上传GPS数据
    CTFHUB SSRF
    [附源码]Python计算机毕业设计Django冬奥会网上商城
    【计算机网络】深度学习使用应用层的HTTP协议
    深圳雷龙LSYT201B语音控制模组
    迭代器的使用
    LeetCode 888. Fair Candy Swap
    ReferenceError: primordials is not defined错误解决
    React-Hook 轮子公开课(从零开始)用最基础的方式写出一个简单的组件库——第二课【Button】组件
    Nginx:epoll红黑树和双向链表如何做到少量拷贝和轮循实现高并发
  • 原文地址:https://blog.csdn.net/qq_52421092/article/details/126126180