鱼C论坛

 找回密码
 立即注册
查看: 3725|回复: 6

[已解决]正则表达式校验疑惑

[复制链接]
发表于 2022-12-28 12:11:53 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
在写一个正则表达式,目标功能是 提取包含大小写字母的字符串



我的写法
(?=[a-z])(?=[A-Z])

我的思路 正向先行断言两次分别是大小写字母,



正确答案是
(?=.*?[a-z])(?=.*?[A-Z]).+

请问正确答案中的=.*?起到什么作用,为什么我不加连a-z都匹配不到?

最后为啥要A-Z加上.+,而前面a-z不用加.+??
最佳答案
2022-12-28 13:00:29

一、

(?=[a-z])(?=[A-Z]) 是不可能有匹配的,

如果不加 .*? 使断言中的字符串长度不固定的话,

(?=[a-z]) 和 (?=[A-Z]) 是矛盾的,有什么字符既是小写又是大写的?

不可能有既是小写字母开头又是大写字母开头的字符串,自然什么也匹配不上了


二、断言只是相当于一个条件而已,限制了要匹配的字符串要以什么开头或以什么结尾,

匹配表达式是断言后面的内容,

(?=.*?[a-z])(?=.*?[A-Z]).+ 这个可以匹配上以 .*?[a-z] 开头且以 .*?[A-Z] 开头的任意字符组成的字符串 .+

(?=.*?[a-z])(?=.*?[A-Z]) 你去掉 .+ 的话就是匹配以 .*?[a-z] 开头且以 .*?[A-Z] 开头的空字符,即使满足断言匹配上了你也只能得到空字符
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-12-28 12:50:16 | 显示全部楼层
(?=.*?[a-z])

这条直白点的回溯条件是  :  什么都可以有,但必须有a-z   是这样吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-12-28 13:00:29 | 显示全部楼层    本楼为最佳答案   

一、

(?=[a-z])(?=[A-Z]) 是不可能有匹配的,

如果不加 .*? 使断言中的字符串长度不固定的话,

(?=[a-z]) 和 (?=[A-Z]) 是矛盾的,有什么字符既是小写又是大写的?

不可能有既是小写字母开头又是大写字母开头的字符串,自然什么也匹配不上了


二、断言只是相当于一个条件而已,限制了要匹配的字符串要以什么开头或以什么结尾,

匹配表达式是断言后面的内容,

(?=.*?[a-z])(?=.*?[A-Z]).+ 这个可以匹配上以 .*?[a-z] 开头且以 .*?[A-Z] 开头的任意字符组成的字符串 .+

(?=.*?[a-z])(?=.*?[A-Z]) 你去掉 .+ 的话就是匹配以 .*?[a-z] 开头且以 .*?[A-Z] 开头的空字符,即使满足断言匹配上了你也只能得到空字符
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-12-28 13:06:00 | 显示全部楼层
本帖最后由 isdkz 于 2022-12-28 13:07 编辑
jcpython2 发表于 2022-12-28 12:50
这条直白点的回溯条件是  :  什么都可以有,但必须有a-z   是这样吗?


可以这么说,而且使 [a-z] 的位置不确定的话不会跟 (?=.*?[A-Z]) 冲突,

因为没有一个字符同时满足 [a-z] 和 [A-Z] 的,

(?=[a-z])(?=[A-Z]) 这个断言很明显就把 [a-z] 和 [A-Z] 都限制在第一个位置,这是不可能满足的条件
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-12-28 13:29:33 | 显示全部楼层
isdkz 发表于 2022-12-28 13:00
一、

(?=[a-z])(?=[A-Z]) 是不可能有匹配的,

首先感谢老哥如此详细,也讲得很通透

现在说说我的理解看还有错漏不


因为两个()()的都是条件,如果我不写.+就是没有告诉系统我到底要拿符合这个条件的什么出来,当我加了.+告诉他是在任意内容任意次数的符合()()条件的元素
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-12-28 13:40:47 | 显示全部楼层
本帖最后由 isdkz 于 2022-12-28 13:44 编辑
jcpython2 发表于 2022-12-28 13:29
首先感谢老哥如此详细,也讲得很通透

现在说说我的理解看还有错漏不


没有加 .+ 也不算没有告诉系统要拿符合这个条件的什么出来,

只能说是取符合这个条件的空字符,什么都没有也就是有空嘛,

他总要有个能匹配的东西的,如果他无法确定要匹配什么估计会出错的

企业微信截图_16722059871156.png

评分

参与人数 1鱼币 +1 收起 理由
jcpython2 + 1 感谢楼主无私奉献!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-12-28 13:53:27 | 显示全部楼层
isdkz 发表于 2022-12-28 13:40
没有加 .+ 也不算没有告诉系统要拿符合这个条件的什么出来,

只能说是取符合这个条件的空字符,什么 ...

万分感谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-25 05:28

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表