正则表达式校验疑惑
在写一个正则表达式,目标功能是 提取包含大小写字母的字符串我的写法 (?=)(?=)
我的思路 正向先行断言两次分别是大小写字母,
正确答案是 (?=.*?)(?=.*?).+
请问正确答案中的=.*?起到什么作用,为什么我不加连a-z都匹配不到?
最后为啥要A-Z加上.+,而前面a-z不用加.+?? (?=.*?)
这条直白点的回溯条件是:什么都可以有,但必须有a-z 是这样吗?
一、
(?=)(?=) 是不可能有匹配的,
如果不加 .*? 使断言中的字符串长度不固定的话,
(?=) 和 (?=) 是矛盾的,有什么字符既是小写又是大写的?
不可能有既是小写字母开头又是大写字母开头的字符串,自然什么也匹配不上了
二、断言只是相当于一个条件而已,限制了要匹配的字符串要以什么开头或以什么结尾,
匹配表达式是断言后面的内容,
(?=.*?)(?=.*?).+ 这个可以匹配上以 .*? 开头且以 .*? 开头的任意字符组成的字符串 .+
(?=.*?)(?=.*?) 你去掉 .+ 的话就是匹配以 .*? 开头且以 .*? 开头的空字符,即使满足断言匹配上了你也只能得到空字符
本帖最后由 isdkz 于 2022-12-28 13:07 编辑
jcpython2 发表于 2022-12-28 12:50
这条直白点的回溯条件是:什么都可以有,但必须有a-z 是这样吗?
可以这么说,而且使 的位置不确定的话不会跟 (?=.*?) 冲突,
因为没有一个字符同时满足 和 的,
(?=)(?=) 这个断言很明显就把 和 都限制在第一个位置,这是不可能满足的条件 isdkz 发表于 2022-12-28 13:00
一、
(?=)(?=) 是不可能有匹配的,
首先感谢老哥如此详细,也讲得很通透
现在说说我的理解看还有错漏不
因为两个()()的都是条件,如果我不写.+就是没有告诉系统我到底要拿符合这个条件的什么出来,当我加了.+告诉他是在任意内容任意次数的符合()()条件的元素 本帖最后由 isdkz 于 2022-12-28 13:44 编辑
jcpython2 发表于 2022-12-28 13:29
首先感谢老哥如此详细,也讲得很通透
现在说说我的理解看还有错漏不
没有加 .+ 也不算没有告诉系统要拿符合这个条件的什么出来,
只能说是取符合这个条件的空字符,什么都没有也就是有空嘛,
他总要有个能匹配的东西的,如果他无法确定要匹配什么估计会出错的
isdkz 发表于 2022-12-28 13:40
没有加 .+ 也不算没有告诉系统要拿符合这个条件的什么出来,
只能说是取符合这个条件的空字符,什么 ...
万分感谢
页:
[1]