作者jijuan ()
看板Python
标题[问题] 请问密码检测的正规表达式
时间Fri Feb 1 08:33:40 2019
看到一个题目是长度为8的密码,
必须至少含有一个大写字母、一个小写字母和一个数字,
找到这个正规表达式,
^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8}$
有几个地方不懂想请问,
(1)?=这部分是Positive lookahead,查了一下它的定义是:
Positive lookahead works just the same. q(?=u) matches a q that is followed
by a u, without making the u part of the match.
所以第一个括号里,是 .*\d 这一部分被视为u吗?这样的话q是指哪部分呢?
对第二个括号来说,它前面的(?=.*\d)被视为q吗?还是每个括号都是独立的分组?
还是说因为lookahead本身不会消耗字元,所以在没有 q的情况下,就把它当作是一个
判断句来用这样?
(2).*用来匹配所有东西,那为什麽後面还跟着\d?我现在的理解是,假设"abFj45dE"
是我要比对的密码,比对到4这个数字时,abFj就是.*的部分吗?也就是说必须符合一
串字元之後必须0-9之间的数字这样?还是说(?=.*)本身就是一个特定的写法?
(3)另外根据语言的不同,是不是有些正规表达式中lookbehind只允许等宽长度的字串
?
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 125.231.124.40
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Python/M.1548981223.A.967.html
2F:→ s860134: 叫做有限状态机,(1)可以理解为这个表达式只要走过後 02/01 09:01
3F:→ s860134: 就会把爬过的字串都吐回来,所以在第二个组小括弧中 02/01 09:01
4F:→ s860134: 他看到的还是 ^ 02/01 09:02
5F:→ s860134: * = "不限定数量" 所以包含 0 个,也就符合检察要求 02/01 09:04
6F:→ s860134: 3,应该不是等宽 是定长?可能需要举个例子 02/01 09:33
7F:推 cutekid: 推 s 大解说(Y) 02/01 11:56
8F:推 s860134: 上面连结我好想没切好时间 只要看 13:21 那张图就可以了 02/01 22:40
9F:→ s860134: 在资工基础课程至少有两次学这个 编译器 和 正规语言 02/01 22:41
10F:→ jijuan: s大是说13分21秒吗,可是影片总共才13分20秒耶? 02/02 07:22
※ 编辑: jijuan (122.118.208.87), 02/02/2019 07:23:06
11F:→ s860134: 5:06 抱歉 QQ 手机显示的是全长 02/02 10:20
12F:推 x246libra: 还是不懂 S大的意思 只要走过後就会把爬过的字串都吐回 02/02 19:32
13F:→ x246libra: 不知道是否可以在详细说明一下 02/02 19:33
14F:→ s860134: assetion 不会消耗掉任何字元 02/02 22:02
15F:→ s860134: assertion 02/02 22:02
16F:→ s860134: 就是他不会导致接续的 pattern 要处理的字元不同 02/02 22:04
17F:推 x246libra: 可以理解成 (?=)吐出位置,不消耗字元? 02/03 09:13
18F:推 x246libra: 我挺好奇把.{8}放在三个小括号的最前面,结果会一样吗 02/03 09:16
19F:→ x246libra: ? 02/03 09:16