模块 1 · 第 3 课(共 4)课程中的3/32~8 min
模块课程(3/4)
通配符:点“.”
正则表达式中的点 . 是通配符:它匹配任何单个
字符\u2026,但有一个重要的例外:它不匹配
换行符 (\n)。
Code
Pattern: c.t
Sample: cat cot cut c@t c\nt
^^^ ^^^ ^^^ ^^^三个字母:c、任何字符、t。中间没有换行符,所以 c\nt
不匹配(默认情况下)。
这个点非常有用,但也很危险:不加纪律地使用它
捕获的内容超出您的预期。与模块 2 中的量词结合
(.*, .+?) 它是 90% 的模式的来源,这些模式“不按照我的方式工作”
预计”。
s 标志:“dotAll”
使用 s 标志(也称为 dotAll 或 single-line),点匹配
每个字符,包括换行符。对于提取跨越的块很有用
多行。
Code
Pattern: <p>.*</p>
Flag: gs
Sample: <p>prima\nseconda</p>
^^^^^^^^^^^^^^^^^^^^^点通配符的限制和行为
点 . 是一个强大的通配符,但默认情况下它不匹配换行符 (\\n)。如果您希望点完全匹配所有内容(包括换行符),则必须启用 s (dotAll) 标志。将点与量词 (.*) 组合时要小心,因为它往往会消耗太多文本(贪婪行为)。
尝试一下
锻炼#regex.m1.l3.e1
尝试:0加载中...
查找由括号分隔的每个三元组字符,例如`(abc)`、`(xyz)`。对 3 个内部字符使用通配符。
正在加载编辑器...
显示提示
三个点代表三个任意字符。括号是元字符:必须用 \\ 转义它们。
3 次尝试后可用的解决方案
复习练习
锻炼#regex.m1.l3.e2
尝试:0加载中...
提取“[INIZIO]”和“[FINE]”之间的块,该块可以跨越多行。您将需要“s”标志,以便点也匹配换行符,以及量词的“惰性”版本(“.*?”,模块 2)。
正在加载编辑器...
显示提示
如果没有 s 标志,点将在行尾停止:添加它。形式.*? (懒惰)在第一个[FINE]处停止比赛。
3 次尝试后可用的解决方案
额外的挑战
锻炼#regex.m1.l3.e3
尝试:0加载中...
Find all 3-character sequences starting with `c` and ending with `t` (e.g. `cat`, `cot`, `c-t`).
正在加载编辑器...
显示提示
该模式使用点“.”表示通配符中间字符。
3 次尝试后可用的解决方案