[问题] 请问密码检测的正规表达式

楼主: jijuan   2019-02-01 08:33:40
看到一个题目是长度为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只允许等宽长度的字串
作者: s860134 (s860134)   2019-02-01 08:58:00
https://goo.gl/Vu4u9S 正规表达式内含就 FSM叫做有限状态机,(1)可以理解为这个表达式只要走过后就会把爬过的字串都吐回来,所以在第二个组小括号中他看到的还是 ^* = "不限定数量" 所以包含 0 个,也就符合检察要求3,应该不是等宽 是定长?可能需要举个例子
作者: cutekid (可爱小孩子)   2019-02-01 11:56:00
推 s 大解说(Y)
作者: s860134 (s860134)   2019-02-01 22:40:00
上面连结我好想没切好时间 只要看 13:21 那张图就可以了在资工基础课程至少有两次学这个 编译器 和 正规语言
楼主: jijuan   2019-02-02 07:22:00
s大是说13分21秒吗,可是影片总共才13分20秒耶?
作者: s860134 (s860134)   2019-02-02 10:20:00
5:06 抱歉 QQ 手机显示的是全长
作者: x246libra (楓)   2019-02-02 19:32:00
还是不懂 S大的意思 只要走过后就会把爬过的字串都吐回不知道是否可以在详细说明一下
作者: s860134 (s860134)   2019-02-02 22:02:00
assetion 不会消耗掉任何字符assertion就是他不会导致接续的 pattern 要处理的字符不同
作者: x246libra (楓)   2019-02-03 09:13:00
可以理解成 (?=)吐出位置,不消耗字符?我挺好奇把.{8}放在三个小括号的最前面,结果会一样吗?

Links booklink

Contact Us: admin [ a t ] ucptt.com