正则与文本处理指南
正则多行与 dotAll:锚点、点号与换行
明确 m 改变锚点、s 改变点号,构造可预测的多行提取表达式。
m 改变锚点
m 让 ^ 和 $ 使用行边界,但不会让点号匹配换行。
逐行日志可以用锚点定位行内容,需要全部匹配时还需 g,而非只处理第一行。
Input: ok
ERROR failed
Pattern: ^ERROR.*$
Flags: gm
Match: ERROR faileds 改变点号
s 让 . 匹配行终止符,没有 m 时锚点仍面向整个输入。
明确分隔符之间的文本可用 dotAll 跨行,分隔符应为普通文本而非嵌套结构语法。
Input: BEGIN
first
second
END
Pattern: BEGIN.*?END
Flags: s考虑换行形式
文件可能使用 LF 或 CRLF,表达式处理不当时捕获内容可能包含回车。
应先检查不可见字符,不能用全局 trim 掩盖问题,缩进和行尾空格也可能有意义。
嵌套结构使用解析器
懒惰点号只改变消耗长度,不会让正则理解任意嵌套 HTML、JSON 或平衡容器。
测试分隔符缺失和重复的情况,结构化来源应通过解析器定位字段后转换。