跳转到主要内容
模块 3 · 第 3 课(共 4)课程中的11/32~10 min
模块课程(3/4)

`m` 标志:多行

使用 m (多行)标志,锚点 ^ 和 $ 改变含义: 它们不再是整个字符串的开始/结束,而是整个字符串的开始/结束 每行。一行由 \n 分隔(或由行的开头/结尾) 字符串)。

Code
Pattern: ^Errore
Flag:    gm
Sample:  Errore: A\nInfo: B\nErrore: C
         ^^^^^^         ^^^^^^

如果没有 m ,它将仅匹配绝对开头的 Errore 。 样本(1 个匹配)。使用 m,它匹配每行的开头 (2 匹配)。

m 不会更改点

常见的混淆:m 标志不会改变点的含义 .。即使使用 m,该点仍然不匹配 \n。来制作点 匹配您需要的所有内容 s 标志(在模块 1 中介绍)。

m 和 s 是正交的:您可以单独使用它们(ms), 或者两者都没有。

多行标志和逐行处理

m 标志修改 ^ 和 $ 的行为,使它们匹配多行文本块中每行的开头和结尾(由 \\n 分隔),而不是仅查看整个字符串的绝对开头和结尾。

尝试一下

锻炼#regex.m3.l3.e1
尝试:0加载中...

找到以“ERROR”开头的每一行。每行之间用 \\n 分隔;使用标志“g”和“m”。

正在加载编辑器...
显示提示

m 标志使 ^ 也匹配内行的开头,而不仅仅是绝对的第一个字符。

3 次尝试后可用的解决方案

复习练习

锻炼#regex.m3.l3.e2
尝试:0加载中...

找到以句点结尾的每一行。使用带有标志“m”和“g”的“$”锚。

正在加载编辑器...
显示提示

带有 gm 标志的 \\.$ 匹配每行末尾的句点,而不仅仅是样本末尾的句点。

3 次尝试后可用的解决方案

额外的挑战

锻炼#regex.m3.l3.e3
尝试:0加载中...

Find all lines in a multiline log that start exactly with the string `ID:` followed by a digit.

正在加载编辑器...
显示提示

在 ID: 之前使用 ^ 并确保 m 标志处于活动状态。

3 次尝试后可用的解决方案