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|B 与 A 或 B 匹配。 |
* |
匹配 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 |
控制模式中“^”和“$”的行为。缺省情况下,这些模式分别仅在输入文本的开头和结尾处匹配。如果设置了此标志,那么“^”和“$”还在输入文本内部每一行的开头和结尾处匹配。 |