notepad++正则匹配[和]间内容需勾选“匹配换行符”,用[(.*?)]非贪婪捕获,替换时用\1引用;不支持嵌套递归,中文括号无需转义,特殊字符须转义,边界需上下文限定防误匹配。

正则匹配两个固定字符之间的内容
Notepad++ 的「查找」和「替换」用的是 PCRE(Perl 兼容正则),但默认开启的是「. 匹配换行符」关闭状态,所以 .* 默认跨不了行。想匹配 [ 和 ] 之间所有内容(含换行),得先勾选 “匹配换行符”(即 . matches newline),否则 \[.*?\] 只能匹配单行内的方括号对。
非贪婪写法更安全:\[(.*?)\] —— 这样不会从第一个 [ 一直吃到文档末尾最后一个 ];而 \[.*\](贪婪)在多组嵌套或连续出现时容易误吞。
替换为固定内容时的注意事项
如果只是把 [xxx] 全部替换成 ABC,直接填 ABC 到「替换为」框就行。但若想保留中间内容做加工(比如加引号),就得用捕获组和反向引用:
- 查找:
\[(.*?)\] - 替换:
"\1"——\1指代第一个括号捕获的内容 - 注意:Notepad++ 不支持
$1,只认\1、\2等反斜杠编号形式 - 如果中间内容为空(如
[]),\1就是空字符串,不会报错
处理嵌套或不闭合的括号
PCRE 本身支持递归((?R)),但 Notepad++ 的正则引擎不支持递归匹配,所以遇到 [[a][b]] 这类嵌套结构,\[(.*?)\] 会匹配成 [a][b](最外层未闭合,实际停在第一个 ]),无法真正识别嵌套层级。
常见应对方式:
- 手动分步处理:先替换最内层(如
[c]),再往外一层层来 - 改用其他工具(如 VS Code、Python 脚本)处理复杂嵌套
- 确认源文本是否真有嵌套——很多所谓“嵌套”其实是误写,实际只需匹配最短合法对
中文、特殊符号与转义问题
如果要匹配的边界不是英文标点,而是中文括号、书名号或 emoji,要注意:
- 中文左括号
【和右括号】不需要转义,直接写【(.*?)】 - 但
[、]、(、)、{、}、^、$、.、+、*、?、|、\这些在正则里有特殊含义,必须加反斜杠转义,例如匹配字面量[abc],得写成\[abc\] - 路径类字符串(如
C:\temp\file.txt)里的反斜杠容易被误认为转义符,建议切换为「扩展(\n, \t, \r, \0, \x…)」模式后用双反斜杠,或改用正斜杠避免混淆
真正难的不是写对一个表达式,而是预判文本中边界字符是否真的“干净”——比如日志里可能混着 [INFO] 和用户输入的 [user input],这时光靠 \[(.*?)\] 会一锅端,得加上下文限定(如行首、前后空格、特定前缀),否则替换就失控了。











