第 16 章 正则表达式
上一页 |  | 下一页

# 第 16 章 正则表达式

在搜索和片段切分规则中使用的是 Java 支持的正则表达式(或简称为 regex)。如果需要更详细的信息，请参阅 Java Regex 文档. 查阅下面提到的附加参考和范例。

### 注意

本章内容是为高级用户准备的，用于定义多变的分割规则或使用更复杂和强大的搜索功能。

表 16.1. Regex - 标志

构造 | ……匹配下列内容：
--- | ---
(?i) | 激活大小写不敏感匹配（缺省模式为大小写敏感）

表 16.2. Regex - 字符

构造 | ……匹配下列内容：
--- | ---
x | 字符 x，除了以下内容……
\uhhhh | 以十六进制值 0xhhhh 表示的字符
\t | 制表符 ('\u0009')
\n | 新行（换行）符 ('\u000A')
\r | 回车符 ('\u000D')
\f | 换页符 ('\u000C')
\a | 报警（响铃）符 ('\u0007')
\e | 转义符 ('\u001B')
\cx | 与 x 对应的控制字符
\0n | 八进制值 0n (0 <= n <= 7) 表示的字符
\0nn | 八进制值 0nn (0 <= n <= 7) 表示的字符
\0mnn | 八进制值 0mnn (0 <= m <= 3, 0 <= n <= 7) 表示的字符
\xhh | 十六进制值 0xhh 表示的字符

表 16.3. Regex - 引用

构造 | ……匹配下列内容
--- | ---
\ | 什么都不匹配，但对以下字符进行引用。当您需要对 !$()*+.<>?[\]^{|} 中任意一个元字符进行匹配时需要使用它。
\\ | 例如，这是反斜杠字符
\Q | 什么都不匹配，但是引用 \E 之前的所有字符
\E | 什么都不匹配，但结束由 \Q 开始的引用

表 16.4. Regex - 用于 Unicode 字块和分类的类

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

表 16.5. Regex - 字符类

构造 | ……匹配下列内容
--- | ---
[abc] | a, b 或 c（简单的类）
[^abc] | 除了 a、b 或 c 之外的任何字符（取反）
[a-zA-Z] | a 到 z 和 A 到 Z 的字符，包含两边（范围）

表 16.6. Regex - 预定义字符类

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

表 16.7. Regex - 边界匹配

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

表 16.8. Regex - 贪婪量词

构造 | ……匹配下列内容
--- | ---
X? | X 出现一次或根本不出现
X* | X 出现零次或多次
X+ | X 出现一次或多次

### 注意

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

表 16.9. Regex - 非贪婪量词

构造 | ……匹配下列内容
--- | ---
X?? | X 出现一次或根本不出现
X*? | X 出现零次或多次
X+? | X 出现一次或多次

### 注意

非贪婪量词会匹配尽可能少的字符。例如，a+? 将会匹配 aaabbb 中的 a

表 16.10. Regex - 逻辑操作符

构造 | ……匹配下列内容
--- | ---
XY | X 后跟着 Y
X|Y | X 或 Y
(XY) | XY 作为单个组出现

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

有许多用于开发和测试正则表达式的交互工具。他们几乎都遵循同样的模式（见下面的 Regular Expression Tester 示例）：正则表达式（上面的条目）分析了搜索文本（中间的文本框），进行点击，显示结果文本框。

图 16.1. Regex Tester

请参阅用于 Windows、Linux、FreeBSD 平台的独立工具 The Regex Coach。这个工具和上面的示例几乎一致。

在 OmegaT 内可找到非常有用的正则表达式实例集（请参阅选项 > 片段分割）。在搜索翻译记忆时，下列表所包含的表达式可能会有用：

表 16.11. Regex - 用于译文的正则表达式示例

正则表达式 | 查找以下内容：
--- | ---
(\b\w+\b)\s\1\b | 双字
[\.,]\s*[\.,]+ | 一个逗号或句点，跟着空格，然后是另一个逗号或句点
\. \s+$ | 在行尾，句点后跟着额外的空格
\s+a\s+[aeiou] | 英语：单词，以元音开始，前面可以是 "an" 而不能是 "a"
\s+an\s+[^aeiou] | 英语：如上一条表达式，但为辅音（"a"，而不是 "an")
\s\s+ | 一个以上空格
\.[A-Z] | 句点，跟着一个大写字母——是否在句点和下一个句子间遗漏了空格？

上一页 |  | 下一页
第 15 章 源片段 | 起始页 | 第 17 章 搜索