唐库编辑器的查找替换是世界上最强大的查找替换,具有以下特殊功能:
1)预览替换功能,可以在替换前先预览一下,尤其使用正则表达式替换时有必要,避免出错;
2)AI替换功能,查找一个词条,用AI处理该词条,替换为AI处理的结果;
3)用户自定义词表替换功能,把多个词替换成为另外的词;
4)可以无限扩充的词条转换功能(例如转大写,转小写)。

1 AI替换功能:
AI替换功能可以用于英文文章的人名地名的翻译,找到这些名称,然后用AI翻译,将翻译结果替换原名。这功能必须借助正则表达式的分组,下面举例说明一下:
查找替换2.jpg
解释:
查找目标 (?<ai>[A-Z][a-z]+) 的含义是:
1) 括号表示正则表达式分组;
2) (?<ai>…)表示该分组名称为“ai”, 该名称为预定义名称有特殊含义,会调用AI查询该分组匹配的词条;
3) [A-Z] 表示A-Z之间任意大写字符;
4) [a-z]+ 表示a-z之间任意小写字符,数量为1到多个;
替换目标 $1 = $@1 的含义是:
$1 代表第一个小括号中的字符串($0 代表整个字符串)
$@1 代表第一个小括号中匹配的字符串经过运算后的结果
从“预览替换”可看到,$1的内容是“John”, $@1的内容是“约翰”,这是AI翻译的结果。

$1,$2,$3代表正则表达式中的第1,2,3个小括号,但小括号分两种,未命名小括号((...)),命名小括号((?<name>...)),特别注意,编号时未命名小括号优先,例如:
(?<a>111)(?<b>000)(222)(333)中,$1是222,$2是333,$3才是111,$4是000,因为未命名小括号优先。

例子2:
查找替换3.jpg
解释:
查找目标 (?<ai>[0-9\(\)+-*\/]+) 的含义是:
1) 括号表示正则表达式分组;
2) (?<ai>…)表示该分组名称为“ai”, 该名称为预定义名称有特殊含义,会调用AI查询该分组匹配的词条;
3) [0-9()+-*\/]+表示由0-9字符和小括号以及 + - * / 构成的式子;
替换目标 $1 = $@1 的含义是:
$1 代表第一个小括号中的字符串($0 代表整个字符串)
$@1 代表第一个小括号中匹配的字符串经过运算后的结果
从“预览替换”可看到,$1的内容是“1+(2+3)*2”, $@1的内容是“11”,这是AI计算的结果。
注意:(?<ai>([0-9\(\)+-*\/]+)),在这个表达式中,ai生成的内容是$@2,因为ai是命名组,编号排后面,里面还有一个括号。

类似上面userlist, ai这样的预定义名称还有:
1)tolower 转小写功能
2)toupper 转大写功能
3)index 返回连续序号12345
4)indexcn 返回连续序号一二三四五
5) len 返回捕获组匹配的字符的个数

2 用户自定义词表替换功能:
用户有一个自定义替换词表:
aaa,bbb
ccc,ddd
意思是 aaa 要替换为 bbb, ccc 要替换为 ddd, 如何操作呢?
查找替换1.jpg

查找目标 (?<userlist>) 的含义是:
这是一个正则表达式,括号组表示分组,“?<userlist>”定义了userlist是分组名,userlist是预定义分组名,有特殊含义,就是查找用户自定义词表中的词。
替换目标 $1 = $@1 $1 表示第一个分组(小括号组)匹配的内容($0表示整个查找串),如果该分组是userlist, 则是用户自定义词表中的逗号前的词,$@1表示第一个分组经过运算后的结果,如果该分组是userlist则是用户自定义词表中的逗号后的词。

从“预览替换”可看到,$1的内容是“aaa”, $@1的内容是“bbb”。

更加常用的用法是查找 \b(?<userlist>)\b
\b 的含义匹配单词边界,例如空格或标点符号,不加\b像 “1aaa1” 会替换为 ”1bbb1”,加了\b后只有单独的 “aaa” 替换为 ”bbb” 了。

3 附加条件查找:
可以指定目标串的上几行必须符合什么条件,例如包含什么不包含什么;
可以指定目标串的下几行必须符合什么条件,例如包含什么不包含什么;
可以仅在左侧目录内容中查找替换。

4 查找替换换行符的问题
\n代表换行符,可在替换内容中使用\n即可。

当查找串中不含\n时,唐库按行内容查找,正则表达式中的 ^,$ 匹配每一行的开头及末尾。

当查找串中含\n时,唐库按文章内容查找,正则表达式中的 ^,$ 匹配整篇文章的开头及末尾。

注意唐库中有两种空格“ ”(ascii码32,真空格), “ ”(ascii码160, 不间断空格,由html的&nbsp;转换而来),查找时是区别对待的。

5 常用高级功能:查找未配对的tag
<tang1>(?!(?:(?!<tang1>).)*</tang1>)可用于查找未配对的<tang1>

查找串(<tang1>[^<]*)(?!(?:(?!<tang1>).)*</tang1>)
替换串$1</tang1>
可用于将未配对的<tang1>配对,不过要求<tang1>...</tang1>中间无其它tag。

6 支持如下高级用法:
占有式匹配 (Possessive match) (?>re)
正向预查 (Positive lookahead) (?=re)
负向预查 (Negative lookahead) (?!re)
正向后行断言 (Positive lookbehind) (?<=re)
负向后行断言 (Negative lookbehind) (?<!re)
反向引用 (Back reference) \1
命名反向引用 (Named back reference) \k’name’
条件判断 (Conditionals) (?(expr) yes|no)