OmegaT 4.2 - 用户指南

# 附录 D. 正则表达式

在查找功能和片段分割规则中所使用的是 Java 所支持的正则表达式。如果你需要更多详细信息，请参阅 Java 正则表达式文档。参见以下的参考和范例。

### 注意

本章内容是为高级用户准备的，用于定义自己的分割规则变体或设计更复杂更强大的关键字查找内容。

表 D.1. 正则表达式 - 标志

结构 | ……匹配以下内容：
--- | ---
(?i) | 启用不区分大小写的匹配（默认情况下，模式区分大小写）。

表 D.2. 正则表达式 - 字符

结构 | ……匹配以下内容：
--- | ---
x | 字符 x，除了以下情况……
\uhhhh | 十六进制值为 0xhhhh 的字符
\t | Tab（制表符）（'\u0009'）
\n | 新行（换行）（'\u000A'）
\r | 回车（'\u000D'）
\f | 换页（'\u000C'）
\a | 告警（响铃）（'\u0007'）
\e | Esc（退出）（'\u001B'）
\cx | 对应于 x 的控制字符
\0n | 八进制值为 0n（0 <= n <= 7）的字符
\0nn | 八进制值为 0nn（0 <= n <= 7）的字符
\0mnn | 八进制值为 0mnn（0 <= m <= 3, 0 <= n <= 7）的字符
\xhh | 十六进制值为 0xhh 的字符

表 D.3. 正则表达式 - 转义

结构 | ...匹配下列内容
--- | ---
\ | 不匹配任何内容，但会转义后继的字符。需要输入元字符 !$()*+.<>?[\]^{|} 之一来匹配其自身时就必须这样。
\\ | 比如，这是反斜杠字符
\Q | 不匹配任何内容，但转义后继 \E 之前的所有字符
\E | 不匹配任何内容，但结束由 \Q 开始的转义

表 D.4. 正则表达式 - Unicode 字区与分类类别

结构 | ...匹配下列内容
--- | ---
\p{InGreek} | 希腊字母区中的字符（单字区）
\p{Lu} | 大写字母（单分类）
\p{Sc} | 货币符号
\P{InGreek} | 任何不在希腊字母区中的字符（取反）
[\p{L}&&[^\p{Lu}]] | 除大写字母外的所有字母（减法）

表 D.5. 正则表达式 - 字符类

结构 | ...匹配下列内容
--- | ---
[abc] | a、b 或 c（单类）
[^abc] | 除 a、b 或 c 之外的任何字符（取反）
[a-zA-Z] | a 到 z 和 A 到 Z 的字符，包含边界（区间）

表 D.6. 正则表达式 - 预定义字符类

结构 | ...匹配下列内容
--- | ---
. | 任意字符（行终止符除外）
\d | 数字：[0-9]
\D | 非数字：[^0-9]
\s | 空白字符：[ \t\n\x0B\f\r]
\S | 非空白字符：[^\s]
\w | 单词字符：[a-zA-Z_0-9]
\W | 非单词字符：[^\w]

表 D.7. 正则表达式 - 边界匹配符

结构 | ...匹配下列内容
--- | ---
^ | 行首
$ | 行尾
\b | 单词边界
\B | 非单词边界

表 D.8. 正则表达式 - 贪婪量词

结构 | ...匹配下列内容
--- | ---
X ? | X，出现一次或不出现
X * | X，出现零次或多次
X + | X，出现一次或多次

### 注意

贪婪量词会尽可能多地匹配。例如， a+ 会匹配 aaabbb 中的 aaa

表 D.9. 正则表达式 - 懒惰（非贪婪）量词

结构 | ...匹配下列内容
--- | ---
X?? | X，出现一次或不出现
X*? | X，出现零次或多次
X+? | X，出现一次或多次

### 注意

非贪婪量词会尽可能少地匹配。例如， a+? 会匹配 aaabbb 中的第一个 a

表 D.10. 正则表达式 - 逻辑运算符

结构 | ...匹配下列内容
--- | ---
XY | X 后跟着 Y
X|Y | X 或 Y
(XY) | XY 作为整体出现

## 正则表达式工具和使用实例

有许多交互式工具可用于开发和测试正则表达式。它们大致上遵循相同的模式（见下面的 Regular Expression Tester 示例）：正则表达式（顶上的条目）分析要进行查找的文本（中间的文本框），产生命中，将其显示在结果文本框中。

图 D.1. Regex Tester

参见 Windows、Linux、FreeBSD 版本的独立工具 The Regex Coach。这和上面的示例大致上相同。

在 OmegaT 本身就可以找到很多很有用的正则表达式案例（参见 选项 > 分割）。以下列出了在翻译记忆库中搜索时可能会用到的表达式：

表 D.11. 正则表达式 - 翻译中用到的正则表达式示例

正则表达式 | 查找以下内容：
--- | ---
(\b\w+\b)\s\1\b | 重复单词
[\.,]\s*[\.,]+ | 一个逗号或句点后面跟着若干空格然后是另一个逗号或句点
\. \s+$ | 在行尾位于句点后的额外空格
\s+a\s+[aeiou] | 英语：以元音开头的单词前面应当是 “an” 而不是 “a”
\s+an\s+[^aeiou] | 英语：检查的内容与上一条一样，但针对辅音（“a” 而非 “an”)
\s{2,} | 多个空格
\.[A-Z] | 句点后面跟着一个大写字母——在句点和下一个句子开头之间是否少了个空格？
\bis\b | 查找 “is”，但不匹配 “this” 或 “isn't” 等。