zoukankan      html  css  js  c++  java
  • 正则中的预判以及懒惰模式

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

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

     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

  • 相关阅读:
    CSS 实现隐藏滚动条同时又可以滚动
    在vue项目中的axios使用配置记录
    QS:vue中qs的使用
    Electron 无边框窗口最大化最小化关闭功能
    CSS样式表能否控制文字禁止选择,复制, 焦点
    yarn 在Vue框架中的常用命令
    Vue 实现左边导航栏且右边显示具体内容(element-ui)
    Vuex 存储||获取后台接口数据
    软件工程第二周开课介绍
    返回一个整数数组中最大子数组的和 (非环状 和环状)
  • 原文地址:https://www.cnblogs.com/laoniaofly/p/5941487.html
Copyright © 2011-2022 走看看