文本
查找替换
两种模式:普通文本用于日常场景,正则用于「要匹配的东西有形状、但没有固定写法」的情况。替换次数能直接告诉你这个模式到底有没有命中。
怎么用
- 把要处理的文本粘贴进来。
- 填写查找内容和替换内容。
- 如果查找内容是 \d+、\s+ 这类模式,勾选「正则」。
- 点「替换」,下方会显示替换了多少处。
最费时间的两类错误
贪婪量词会匹配过头:.* 会把整行剩下的内容都吞掉,而 .*? 会在第一个机会停下。没转义的点号匹配任意字符,所以 v1.0 也能匹配 v1x0。还有能匹配空字符串的模式,比如 a*,在全量替换里会无限循环,除非引擎自己推进位置——这也是某些替换看起来像卡住的原因。
链式替换时,顺序会坏事
连续替换会互相抵消。先把「猫」换成「狗」,再把「狗」换成「鸟」,结果所有的猫都变成了鸟。链条不可避免时,就借一个源文本里不可能出现的临时记号:猫→__TMP1__,狗→鸟,__TMP1__→狗。或者干脆写成一条分支正则,让每个位置只被处理一次。
全项目改名而不后悔
先搜索,把每一处匹配都看一遍,再动手替换。把 user 改成 account,会一并命中 username、superuser 以及所有含这个词的字符串。除非有明确理由,打开全词匹配,并在替换前后对比命中数——从 40 处跳到 400 处,说明规则写错了,不是工作量变大了。
能一次替换完就不要串着替换。串联的替换会把上一轮的输出当作下一轮的输入:先 A→B 再 B→C,结果是所有 A 都变成了 C。
常见问题
需要转义吗?
普通模式下不需要,点号、方括号都按字面处理。正则模式下,字面意义的点要写成 \.,字面反斜杠要写成 \\。
替换内容里能用捕获组吗?
可以。正则模式下 $1、$2 表示捕获到的分组,比如把 (\w+)@(\w+) 替换成 $2 at $1 就能把两半对调。
为什么显示替换了 0 处?
通常是大写小写不一致,或者正则特殊字符被当成了字面量。试试勾选「忽略大小写」,或关掉正则模式。
有替换次数上限吗?
没有,所有匹配都会替换。想限制数量,把限制写进正则本身。
能跨行匹配吗?
这个工具不行——它逐行处理,这样预览才可预测。跨行的模式需要带 dot-all 模式的正则引擎。
替换内容是字面量吗?
$1、\1 都按字面插入,不会被展开,所以你文本里的美元符号会原样保留。