正则表达式 (?=) 正向先行断言

2023-05-16

最近在练习正则表达式,遇到了一道很有意思的题,题目如下


我的答案如下

(?=.*?[A-Z])(?=.*?\d)(?=.*?[a-z]).{8,}

对于这个答案的理解得先从正向先行断言的语法开始说起。

正向先行断言的语法格式如下

expression1(?=expression2)
# 查找expression2前面的expression1

当然这个expression1也可以不写(也就是为空白符

例子如下

该正则表达式的意思为:寻找abcd字符串前的123456字符串。

这里也提一个有意思的地方

以上两个正则表达式中的/\d+/gm/123456/gm其实都能匹配123456这个字符串,但在正向先行断言中,前者会匹配每个数字前面的空白符,后者将123456字符串当成一个整体,只匹配这个整体前面的空白符。

这里面的原理还需要等我研究一下,估计是跟底层代码的实现有关,我猜测是(?=\d+)在匹配的时候会将每个数字单独提取出然后向前比较。


那么回到该题的答案中,先让我们看看 (?=.*?[A-z]) 是什么意思。

很明显上图匹配了大写字母A前面的所有空白符

其中的.*?[A-Z]代表大写字母及其前面的字符串且为懒惰匹配

那么(?=.*?[A-Z])(?=.*?\d)的意思就有点套娃了,按我的理解就是对于(?=.*?\d)而言把(?=.*?[A-Z])当成expression1,对于(?=.*?[A-Z])而言就是把空白符当成expression1

那么这个正则表达式就表示为:在寻找到每个大写字母前面的所有空白符的基础上还要满足:这些空白符都在每个数字前面的所有空白符这个匹配集合中。相当于是两个空白符集合的交集

所以(?=.*?[A-Z])(?=.*?\d)(?=.*?[a-z])相当于是每个大写字母、小写字母、数字前面的所有空白字符的交集

 而后面的.{8,}则匹配这些空白字符后面至少八位字符(贪婪匹配)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

正则表达式 (?=) 正向先行断言 的相关文章

  • 去除多余的0;正则表达式:去掉数字(整数、小数)前面多余的零

    方案1 来源 http zhidao baidu com question 277893180 html 如果是整数 去掉整数前的零 例如 0098765 gt 98765 如果是小数 去掉小数前的零 例如 000 333 gt 0 333
  • Java对正则表达式的支持(手机、身份证校验)

    目录 1 数量 单个 字符匹配 2 数量 单个 字符集 可以从里面任选一个字符 3 数量 单个 简化字符集 4 边界匹配 5 数量表示 默认情况下只有添加上了数量单位才可以匹配多位字符 6 逻辑表达式 可以连接多个正则 7 理解字符 的含义
  • 正则表达式中.*的作用

    今天看正则表达式的书籍是看到这么个例子 要求匹配 文章中的xml 匹配使用的正则表达式为 lt xml gt 一开始没有理解 是做什么用处的 百度了一番后明白了 原来 中 代表任意单个字符 包括空格 代表前面任意单个字符的重复次数 因此 l
  • Python3 如何优雅地使用正则表达式(详解四)

    更多强大的功能 到目前为止 我们只是介绍了正则表达式的一部分功能 在这一篇中 我们会学习到一些新的元字符 然后再教大家如何使用组来获得被匹配的部分文本 更多元字符 还有一些元字符我们没有讲到 接下来小甲鱼一一为大家讲解 有些元字符它们不匹配
  • Shell脚本攻略:通配符、正则表达式

    目录 一 理论 1 通配符 2 正则表达式 二 实验 1 通配符 2 正则表达式 一 理论 1 通配符 1 概念 通配符只用于匹配文件名 目录名等 不能用于匹配文件内容 而且是已存在的文件或者目录 各个版本的shell都有通配符 这些通配符
  • 【PAT乙级】旧键盘打字

    题目描述 旧键盘上坏了几个键 于是在敲一段文字的时候 对应的字符就不会出现 现在给出应该输入的一段文字 以及坏掉的那些键 打出的结果文字会是怎样 输入格式 输入在 2 行中分别给出坏掉的那些键 以及应该输入的文字 其中对应英文字母的坏键以大
  • Java的replaceAll()方法

    replaceAll 方法实际是采用正则表达式的规则去匹配的 在regex中 表示一个 在java中一个 也要用 表示 这样 前一个 代表regex中的 后一个 代表java中的 所以字符串转义一次 正则转义一次 那么一个斜扛要写4个 1
  • Linux文本处理工具和正则表达式

    Linux文本处理工具和正则表达式 一 查看 截取和修改文本的工具 1 查看文本的工具 cat 最常用的文件查看命令 当不指明文件或者文件名为一杠 时 读取标准输入 cat OPTION FILE A 显示所有控制符 tab键 I 行结束符
  • JavaScript最后分水岭——正则表达式

    个人简介 个人主页 微风洋洋 博客领域 编程基础 后端 写作风格 干货 干货 还是tmd的干货 精选专栏 JavaScript 支持洋锅 点赞 收藏 留言 好久不见 甚是想念 大家好 我是微风洋洋 也可以叫我洋锅 细心地小伙伴可能已经发现
  • 爬虫入门_3:数据解析及案例实战

    聚焦爬取 爬取页面中指定的页面内容 编码流程 指定url 发起请求 获取响应数据 数据解析 持久化存储 数据解析分类 正则 re M 多行匹配 re S 单行匹配 bs4 xpath 数据解析原理概述 解析的局部的文本内容都会在标签之间或者
  • Java正则表达式详解

    1 1 正则表达式的概念以及演示 正则表达式可以用一些规定的字符来制定规则 并用来校验数据格式的合法性 正则表达式就是用来验证各种字符串的规则 它内部描述了一些规则 我们可以验证用户输入的字符串是否匹配这个规则 正则表达式是一种强大的校验机
  • grep命令

    grep 全称是global regular expressions print 功能就是查找匹配模式的行 grep对文本内容的处理是以行为单位 输出也是输出匹配的行 也可以使用两个变种程序egrep和fgrep egrep与grep E相
  • 正则实现去除字符串前后空格

    前言 正则去掉字符串前后空格 1 去除左空格 str1是处理后的 let str1 str replace s g 2 去除右空格 str2是处理后的 let str2 str replace s g 3 去除左右空格 let str3 s
  • test is not a function (js正则表达式匹配问题)

    js中正则表达式匹配时 如果使用test函数 就必须不带引号 并且必须是 定义的规则变量 test 要测试的string 定义变量规则不要带引号 会错误的 如果不使用test 使用match则可以带引号 var re 1 9 d 4 10
  • 空格的正则表达式

    在正则表达式想使用空格的时候不能采用 s的方法 因为 s指的是空白 就是所有空白 如果想表示单纯的空格的话可以采用 方括号本身就是匹配其中的字符 那么其中放空格就是匹配空格 如果有其他正则表达式问题可以查看 https blog csdn
  • Python命令行参数定义及注意事项

    在命令行中运行python代码是很常见的 下面介绍如何定义命令后面跟的参数 常规用法 Python代码中主要使用下面几行代码来定义并获取需要在命令行中赋值的参数 import argparse parser argparse Argumen
  • 正则表达式工具类

    在实际开发中总会使用到正则表达式匹配数据 我也是在后面查看了一些资料 下面写一个常用的正则表达式匹配集合 正则匹配模式 表示匹配字符串的开始位置 例外 用在中括号中 时 可以理解为取反 表示不匹配括号中字符串 表示匹配字符串的结束位置 表示
  • JS字符串替换函数全部替换方法

    color olive JS字符串替换函数 Replace 字符串1 字符串2 1 我们都知道JS中字符串替换函数是Replace 字符串1 字符串2 但是这个函数只能将第一次出现的字符串1替换掉 那么我们如何才能一次性全部替换掉了 将上面
  • Python进阶之CrawlSpider的应用及Scrapy配置项的引用

    1 CrawlSpider的应用 CrawlSpider可以根据规则自动分析链接的数据并按照正则的要求取出需要的数据 scrajpy startproject yg cd yg 注意 t crawl参数 scrapy genspider t
  • [网络安全自学篇] 十四.Python攻防之基础常识、正则表达式、Web编程和套接字通信(一)

    这是作者的系列网络安全自学教程 主要是关于网安工具和实践操作的在线笔记 特分享出来与博友共勉 希望您们喜欢 一起进步 前文分享了Wireshark抓包原理知识 并结合NetworkMiner工具抓取了图像资源和用户名密码 本文将讲解Pyth

随机推荐

  • 彻底卸载Xubuntu Kubuntu

    卸载Xubuntu sudo apt remove activity log manager apg apport gtk apt offline aptdaemon aptdaemon data atril atril common bi
  • Wincap安装出现“error opening file for writing wpcap.dll”之解决办法

    Wincap安装出现 error opening file for writing wpcap dll 之解决办法 安装Wireshark时 xff0c 一直出现下面的错误 xff0c 选择忽略这个错误 xff0c Wireshark能正常
  • sqlserver调用webapi

    1 开启组件 xff08 2012以上版本支持 xff09 sp configure 39 show advanced options 39 1 GO RECONFIGURE GO sp configure 39 Ole Automatio
  • 贪吃蛇c语言代码 vc++6.0,贪吃蛇代码-C语言版-VC++6.0

    这是一个贪吃蛇代码 运行环境VC 43 43 6 0 该程序不需要graphics h头文件 这是一个贪吃蛇代码 xff0c 运行环境VC 43 43 6 0 亲测完美运行 该程序在dos系统下运行 xff0c 不需要graphics h头
  • indent expected

    缩进问题 检查代码缩进 转载于 https www cnblogs com gcixx p 11448437 html
  • kibana配置文件说明书

    端口号 server port 5601 kibana服务安装的地址 server host 34 192 168 122 21 34 当使用代理时 xff0c 这里可能对应的是加工后的kibana的URL server basePath
  • ORACLE 清理SYSAUX表空间

    在数据库检查中发现SYSAUX表空间占用过大 xff0c SYSAUX是ORACLE10G开始提供的功能 xff0c 用于数据库为SYSTEM表空间减负 用以下语句查出相应的表空间值 select a tablespace name tru
  • Ubuntu怎么切换为中文版

    Ubuntu怎么切换为中文版 1 打开Ubuntu 2 打开设置 系统设置 xff1b 3 进入Language Support xff1b 4 安装语言 xff1b 5 这时在语言菜单中可以看到安装好的汉语 xff1b 6 将安装好的语言
  • django rest framework自定义返回格式

    一 默认response view from rest framework generics import ListAPIView from serializer import IdcSerializer from models impor
  • Go used as value问题

    练习Go变参时遇到一个报错 xff1a used as value 代码如下 xff1a 错误代码 func myfunc arg int for n 61 range arg fmt Printf 34 And the number is
  • 核密度图(直方图的拟合曲线)

    核密度图可以看作是概率密度图 xff0c 其纵轴可以粗略看做是数据出现的次数 xff0c 与横轴围成的面积是一 法一 xff1a seaborn的kdeplot函数专门用于画核密度估计图 参考 xff1a https www jianshu
  • WinCE6.0bootloader的研究

    为了加载操作系统映像至内存 xff0c Bootloader 在 BSP 的开发中至关重要 1 BootLoader的架构 1 1 Bootloader 简介 Bootloader 是建立在操作系统内核运行之前的一小段程序 xff0c 通过
  • vs2017和vs2019专业版和企业版

    步骤 xff1a 打开vs2017 xff0c 依次点击 gt 帮助 gt 注册产品 专业版 xff1a Professional KBJFW NXHK6 W4WJM CRMQB G3CDH 企业版 xff1a Enterprise NJV
  • vue 创建监听,和销毁监听(addEventListener, removeEventListener)

    最近在做一个有关监听scroll的功能 发现我添加监听之后一直不起作用 mounted window addEventListener 34 scroll 34 this setHeadPosition this setHeadPositi
  • 开发板boa移植

    1 xff0e 下载Boa源码 下载地址 http www boa org 最新发行版本 xff1a 0 94 13 下载 boa 0 94 13 tar gz 解压 xff1a tar xzf boa 0 94 13 tar gz 2 安
  • matlab调用cuda,window下matlab调用cuda的开发流程

    这两天抽点时间研究matlab调用cuda程序的问题 xff0c 发现网上这方面的资料比较少 xff0c 而且nvidia提供的白皮书描述的不够详尽 xff0c 因此对于开发流程进行总结 xff0c 希望大家有用 总的来说 xff0c ma
  • Media Types

    Available Formats XML HTML Plain text Registries included below applicationaudioexampleimagemessagemodelmultiparttextvid
  • PX4里面怎么添加驱动程序

    添加驱动程序 例如 xff0c 要把 GT100 esc cpp添加到一个固件里面去 xff0c 那么 1 首先把h文件放到src drv目录下面 xff0c 2 然后新建一个文件夹 xff0c 在这个文件夹里面放入 cpp文件和cmake
  • LACP详解

    转载自 1条消息 lacp协议 住在我对门的博客 CSDN博客 lacp协议 一 LACP 简介 1 LACP 协议简介 基于IEEE802 3ad 标准的LACP xff08 Link Aggregation Control Protoc
  • 正则表达式 (?=) 正向先行断言

    最近在练习正则表达式 xff0c 遇到了一道很有意思的题 xff0c 题目如下 我的答案如下 61 A Z 61 d 61 a z 8 对于这个答案的理解得先从正向先行断言的语法开始说起 正向先行断言的语法格式如下 expression1