|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
在写一个正则表达式,目标功能是 提取包含大小写字母的字符串
我的写法
我的思路 正向先行断言两次分别是大小写字母,
正确答案是- (?=.*?[a-z])(?=.*?[A-Z]).+
复制代码
请问正确答案中的=.*?起到什么作用,为什么我不加连a-z都匹配不到?
最后为啥要A-Z加上.+,而前面a-z不用加.+??
一、
(?=[a-z])(?=[A-Z]) 是不可能有匹配的,
如果不加 .*? 使断言中的字符串长度不固定的话,
(?=[a-z]) 和 (?=[A-Z]) 是矛盾的,有什么字符既是小写又是大写的?
不可能有既是小写字母开头又是大写字母开头的字符串,自然什么也匹配不上了
二、断言只是相当于一个条件而已,限制了要匹配的字符串要以什么开头或以什么结尾,
匹配表达式是断言后面的内容,
(?=.*?[a-z])(?=.*?[A-Z]).+ 这个可以匹配上以 .*?[a-z] 开头且以 .*?[A-Z] 开头的任意字符组成的字符串 .+
(?=.*?[a-z])(?=.*?[A-Z]) 你去掉 .+ 的话就是匹配以 .*?[a-z] 开头且以 .*?[A-Z] 开头的空字符,即使满足断言匹配上了你也只能得到空字符
|
|