模块 6 · 第 4 课(共 4)课程中的24/32~12 min
模块课程(4/4)
实践中环顾四周
让我们在现实场景中将所有四种形式的环顾四周放在一起。 当您需要执行以下操作时,环顾四周会大放异彩:
- 提取一个没有上下文的值 标识它。
- 根据多个独立条件验证字符串。
- 过滤满足某些条件但不满足其他条件的匹配。
密码验证
Code
Pattern: ^(?=.*[A-Z])(?=.*\d)(?=.*[^a-zA-Z\d]).{8,}$
Checks:
- at least one uppercase (?=.*[A-Z])
- at least one digit (?=.*\d)
- at least one symbol (?=.*[^a-zA-Z\d])
- minimum length 8 .{8,}每个前瞻检查一个条件,从头开始 (^)。他们是
全零宽度:引擎停留在位置 0,然后消耗
.{8,}$。
分隔符之间的提取
Code
Pattern: (?<=\().+?(?=\))
Sample: Funzione foo(bar) e baz(qux, qix)
Match: "bar", "quux, qix" (without parentheses)Lookbehind + Lookahead + 惰性量词:提取里面的内容 括号,但不包括它们。
结合前瞻和后瞻
一起使用lookahead和lookbehind可以隔离位于特定标签或格式内的字符串(例如提取两个标签之间的文本而不包括最终匹配中的标签)。这避免了后续的字符串清理操作。
尝试一下
锻炼#regex.m6.l4.e1
尝试:0加载中...
从日志中提取每个“key=value”赋值的值:仅提取值(没有键,没有“=”)。值可能包含字母和数字。
正在加载编辑器...
显示提示
将 `=` 移至后向查找 (?<==) 内:这样匹配项仅包含值。
3 次尝试后可用的解决方案
复习练习
锻炼#regex.m6.l4.e2
尝试:0加载中...
查找哪些单词至少有一个大写字母和至少一个数字(以任意顺序),并在文本中找到它们。
正在加载编辑器...
显示提示
在开始处进行双重前瞻:(?=\\w*[A-Z])(?=\\w*\\d)。然后用 \\w+ 消耗该单词。
3 次尝试后可用的解决方案
额外的挑战
锻炼#regex.m6.l4.e3
尝试:0加载中...
Extract only numerical digits that are enclosed exactly between parentheses, e.g. extract `102` from `(102)` without capturing the parentheses.
正在加载编辑器...
显示提示
Combine a positive lookbehind (?<=\( ) for the open parenthesis and a positive lookahead (?=\) ) for the closed one.
3 次尝试后可用的解决方案