• 正则中的预判以及懒惰模式


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

    个人理解:另外预判需要正则表达式做引导,相当于在原有的正则表达式上增添条件,没有正则表达式的预判无效

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

          何时使用:只要正则中出现类似"而且"

          比如:4位数字,但不能包含4和7

          (?=[^47]$) 是否由除了4,7之外的字符组成

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

       比如:6位以上密码。

       字母,数字组成

               首字母不能是数字: [a-zA-Z][a-zA-Z0-9]{5,}

               必须至少包含1个大写字母

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

               必须至少包含1个数字

               不能都由小写字母和大写字母组成:

                (?![a-zA-Z]+$)

        8位密码,开头为字母,其他位为w区间的字符

        (?!d+$)w{8}

    非懒惰模式以及懒惰模式:.*? 以及 .*

        8位数,每一位上数字都不一样

        (?!.*?(d).*?(1).*?$)d{8};

        个人理解:由于预判作用是正向否定,负向肯定的意思,那么可以这么理解,从最后面往前面看, 最后一个.*?表示的是在区域范围内查找,即相邻数字之间或者是非相邻数字之间,而第一个.*?表示的是首个数字或者中间的某个数字,与之相邻的.*?(1)表示的是第一个括号里面的内容,即为(d),意思就是与之前相同的数字,而预判是正向否定,即排除范围内相同数字,而区间是d{8},从而获取8位都不相同的数字

    正则中容易混淆的地方:

    s  指代所有非空字符

    w 指代匹配所有单词字符,等价于[0-9a-zA-Z_]

    正则匹配中小写和大写匹配的内容相反,比如s和S,w和W

  • 相关阅读:
    Android Studio 快捷键
    Mac 下面,添加android adb命令(一般环境变量的添加方法)
    快速掌握 Android Studio 中 Gradle 的使用方法
    JAVA 十六进制与字符串的转换
    总结自己的Git常用命令
    Android性能优化典范---转
    【.NET Core微服务实战-统一身份认证】开篇及目录索引
    调用API修改Ocelot的配置文件
    VUE组件汇总
    Vue + GraphQL初试
  • 原文地址:https://www.cnblogs.com/laoniaofly/p/5941487.html
Copyright © 2020-2023  润新知