正则与文本处理指南

正则多行与 dotAll:锚点、点号与换行

明确 m 改变锚点、s 改变点号,构造可预测的多行提取表达式。

Nav Tools ·

m 改变锚点

m 让 ^ 和 $ 使用行边界,但不会让点号匹配换行。

逐行日志可以用锚点定位行内容,需要全部匹配时还需 g,而非只处理第一行。

Input: ok
       ERROR failed
Pattern: ^ERROR.*$
Flags: gm
Match: ERROR failed

s 改变点号

s 让 . 匹配行终止符,没有 m 时锚点仍面向整个输入。

明确分隔符之间的文本可用 dotAll 跨行,分隔符应为普通文本而非嵌套结构语法。

Input: BEGIN
       first
       second
       END
Pattern: BEGIN.*?END
Flags: s

考虑换行形式

文件可能使用 LF 或 CRLF,表达式处理不当时捕获内容可能包含回车。

应先检查不可见字符,不能用全局 trim 掩盖问题,缩进和行尾空格也可能有意义。

嵌套结构使用解析器

懒惰点号只改变消耗长度,不会让正则理解任意嵌套 HTML、JSON 或平衡容器。

测试分隔符缺失和重复的情况,结构化来源应通过解析器定位字段后转换。

参考资料

← 正则与文本处理指南