ICU 正则表达式

ICU 正则表达式实施细节的描述。

此引用内容摘自 ICU User Guide。此内容描述 ICU 正则表达式实施细节。如果您在使用 Agent Builder 正则表达式功能,那么此信息很重要,因为不同编程语言实施正则表达式的方式略有不同。

表 1. 正则表达式元字符
字符 描述
\a 与响铃符 \u0007 匹配
\A 在输入内容的开头处匹配。与 ^ 的不同之处是 \A 不在输入内容中的换行后匹配。
\b,在 [Set] 外 如果当前位置是单词边界就匹配。边界在单词 (\w) 和非单词 (\W) 字符间的过渡处出现,忽略组合标记。有关单词边界的更多信息,请参阅“ICU 边界分析”。
\b,在 [Set] 内 与退格符 \u0008 匹配。
\B 如果当前位置不是单词边界就匹配。
\cX Ctrl-X 字符匹配。
\d 与具有 Unicode 常规类别 Nd(N 表示数字,d 表示十进制数字)的任何字符匹配。
\D 与任何非十进制数字的字符匹配。
\e 与转义符 \u001B 匹配。
\E 终止由 \Q ... \E 引起来的序列。
\f 与换页符 \u000C 匹配。
\G 如果当前位置是先前匹配的末尾就匹配。
\n 与换行符 \u000A 匹配。
\N{UNICODE CHARACTER NAME} 与指定字符匹配。
\p{UNICODE PROPERTY NAME} 与任何具有指定 Unicode 属性的字符匹配。
\P{UNICODE PROPERTY NAME} 与不具有指定 Unicode 属性的任何字符匹配。
\Q \E 之前的所有字符两边加引号。
\r 与回车符 \u000D 匹配。
\s 与空格字符匹配。空格定义为 [\t\n\f\r\p{Z}]
\S 与非空格字符匹配。
\t 与横向制表符 \u0009 匹配。
\uhhhh 与具有十六进制值 hhhh 的字符匹配。
\Uhhhhhhhh 与具有十六进制值 hhhhhhhh 的字符匹配。必须正好提供八个十六进制数字,即使最大的 Unicode 代码点为 \U0010ffff
\w 与单词字符匹配。单词字符为 [\p{Ll}\p{Lu}\p{Lt}\p{Lo}\p{Nd}]
\W 与非单词字符匹配。
\x{hhhh} 与具有十六进制值 hhhh 的字符匹配。可以提供 1 到 6 个十六进制数字。
\xhh 与具有 2 位数十六进制值 hh 的字符匹配。
\X 与语素簇匹配。
\Z\ 如果当前位置在输入的结尾处、而在最后一行的终止符(如果存在)之前就匹配。
\z 如果当前位置在输入内容结尾处就匹配。
\n 反向引用。与和第 n 个捕获组匹配的任何对象匹配。n 必须为 > 1< 模式中捕获组总数的数字。
注: ICU 正则表达式中不支持八进制转义符(如 \012)。
[pattern] 与集内的任意一个字符匹配。有关模式中可能出现的内容的完整描述,请参阅 UnicodeSet
. 与任意字符匹配。
^ 在行开头处匹配。
$ 在行结尾处匹配。
\ 在以下字符两边加引号。必须加引号才能被视为字面值的字符有:* ? + [ ( ) { } ^ $ | \ . /
表 2. 正则表达式运算符
运算符 描述
| 交替。A|BAB 匹配。
* 匹配 0 次或 0 次以上。匹配次数尽可能地多。
+ 匹配 1 次或 1 次以上。匹配次数尽可能地多。
? 匹配 0 次或 1 次。首选 1 次。
{n} 精确匹配 n 次
{n,} 至少匹配 n 次。匹配次数尽可能地多。
{n,m} 匹配 n 到 m 次。匹配次数尽可能地多,但不超过 m 次。
*? 匹配 0 次或 0 次以上。匹配次数尽可能地少。
+? 匹配 1 次或 1 次以上。匹配次数尽可能地少。
?? 匹配 0 次或 1 次。首选 0 次。
{n}? 精确匹配 n 次
{n,}? 至少匹配 n 次,但是不超过整体模式匹配所需的次数
{n,m}? 匹配 n 到 m 次。匹配次数尽可能地少,但不少于 n 次。
*+ 匹配 0 次或 0 次以上。首次遇到时,匹配的次数尽可能地多,即使总体匹配失败,重试次数也不减少(占有匹配)
++ 匹配 1 次或 1 次以上。占有匹配。
?+ 匹配 0 次或 1 次。占有匹配。
{n}+ 精确匹配 n 次
{n,}+ 至少匹配 n 次。占有匹配。
{n,m}+ 匹配 n 到 m 次。占有匹配。
( ... ) 捕获括号。与括起的子表达式匹配的输入范围在该匹配后可用。
(?: ... ) 非捕获括号。将包含的模式进行分组,但是不提供对匹配文本的捕获。比捕获括号的效率更高。
(?> ... ) 原子匹配括号。与括起子表达式的首次匹配是唯一尝试的一次匹配。如果此次匹配未导致整体模式匹配,备份与“(?>”前面的位置匹配的搜索。
(?# ... ) 自由格式注释 (?# comment )
(?= ... ) 先行断言。如果括起的模式在当前输入位置匹配而没有提前输入位置,那么为 True。
(?! ... ) 否定先行断言。如果括起的模式在当前输入位置不匹配,那么为 True。不提前输入位置。
(?<= ... ) 后顾断言。如果括起的模式与当前输入位置前面的文本匹配,那么为 True。匹配的最后一个字符正好是位于当前位置前面的输入字符。不变更输入位置。后顾模式匹配的可能字符串长度必须受限(无 *+ 运算符)。
(?<!...) 否定后顾断言。如果括起的模式与当前输入位置前面的文本不匹配,那么为 True。匹配的最后一个字符正好是位于当前位置前面的输入字符。不变更输入位置。后顾模式匹配的可能字符串长度必须受限(无 *+ 运算符)。
(?ismx-ismx: ... ) 标志设置。在启用或禁用指定标志的情况下对括起的表达式求值。
(?ismx-ismx) 标志设置。更改标志设置。更改应用于设置后面的模式部分。例如,(?i) 更改为不区分大小写的匹配。

替换文本

“查找与替换”操作的替换文本可以包含对来自查找的捕获组文本的引用。引用的形式为 $n,其中 n 是捕获组数量。
表 3. 替换文本字符
字符 描述
$n 用位置捕获组 n 的文本替换 $n。n 必须 >= 0,并且不大于捕获组数量。$ 后不跟数字不表示任何特殊意义,在替换文本中将按原样显示为 $。
\ 将此字符视为字面值,不表示任何特殊含义。替换文本中的反斜杠转义仅针对“$”“\”是必需的,但可以用于任何其他字符,而不会产生反作用。
$@n 用捕获组 n 的文本替换与捕获组 n 匹配的正则表达式。n 必须 >= 0,但不大于捕获组数量。$@ 后不跟数字不表示任何特殊意义,在替换文本中将按原样显示为 $@
$#n 用匹配捕获组 n 的文本替换 $#n。n 必须 >= 0,并且不得大于匹配的捕获组数量。$# 后不跟数字不表示任何特殊意义,在替换文本中将按原样显示为 $#

标志选项

以下标志用于控制正则表达式匹配的各个方面。可以在将表达式编译为 RegexPattern 对象时指定标志值。或者,可以使用 (?ismx-ismx) 模式选项在模式自身内部指定。
表 4. 标志选项
标志(模式) 标志(API 常量) 描述
i UREGEX_CASE_INSENSITIVE 如果设置了此标志,将以不区分大小写的方式进行匹配。
x UREGEX_COMMENTS 如果设置了此标志,那么可以在模式中使用空格和 #comments
s UREGEX_DOTALL 如果设置了此标志,那么模式中的“.”将与输入文本中的行终止符匹配。缺省情况下不匹配。文本中的回车符/换行对等效于单个行终止符,并且与 RE 模式中的单个“.”匹配
m UREGEX_MULTILINE 控制模式中“^”“$”的行为。缺省情况下,这些模式分别仅在输入文本的开头和结尾处匹配。如果设置了此标志,那么“^”“$”还在输入文本内部每一行的开头和结尾处匹配。