跳转到主要内容
模块 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 次尝试后可用的解决方案