Appearance
正则语法
1. 基础语法
| 类别 | 表达式 | 描述 | 示例 | 示例说明 |
|---|---|---|---|---|
| 字符 | EBNF 1 2 | 匹配该字符 | ] | 匹配字符 “]” |
EBNF | 任何除行终止符之外的字符,或者在 DOTALL 标志被设置时表示任何字符 | . | 匹配除行终止符之外的任意字符 | |
EBNF 1 2 | 十六进制码为 p 的 Unicode 码点 | \x{1d546} | 匹配 Unicode \u{1d546},UTF-16 \ud835\udd46,字符 “𝕆” | |
EBNF | 具有给定十六进制或八进制值的码元 | \u4e2d | 匹配字符 “中” | |
EBNF | 响铃符(\x{7})、转义符(\x{1b})、换页符(\x{8})、换行符(\x{a})、回车符(\x{d})、指标符(\x{9}) | \n | 匹配换行符 | |
EBNF 1 2 | 对应于字符 c 的控制字符 | \cH | H 对应 ASCII 值为 8 的字符退格符(\x{8}) | |
EBNF 1 2 | 字符 c,此处的 \ 表示转义字符 | \\ | 匹配字符 “\” | |
EBNF | 在 \Q 和 \E 之间的任何字符,包括元字符,都将被视为文字 | \Qeverything \w is ^ literal\E | 匹配字符串 “everything \w is ^ literal” | |
| 字符类 | EBNF | 匹配 “[]” 中列举、范围内的任一字符 | [0-9+-] | 匹配数字 0 到 9,以及 “+”、“-” 号 |
EBNF | 匹配任意非 “[]” 中列举、范围内的字符 | [^\d\s] | 匹配任意非数字,非空白字符的字符 | |
EBNF | 字符集的交集 | [\p{L}&&[^A-Za-z]] | 匹配任何语言中任何类型的字母(\p{L}),但是排除 26 个大小写字母 | |
EBNF 1 2 | \p{L} | 匹配一个 Unicode 字母(任何语言中任何类型的字母),predefined 为单个字母时括号可以忽略(即 \pL) | ||
EBNF 1 2 | 数字([0-9],或者在 UNICODE_CHARACTER_CLASS 标志被设置时表示 \p{Digit})/非数字 | |||
EBNF 1 2 | 单词字符([A-Za-z0-9_],或者在 UNICODE_CHARACTER_CLASS 标志被设置时表示 Unicode 单词字符)/非单词字符 | |||
EBNF 1 2 | 空白字符([ \n\r\t\f\x{B}],或者在 UNICODE_CHARACTER_CLASS 标志被设置时表示 \p{IsWhite_Space})/非空白字符 | |||
EBNF 1 2 | 水平制表符/非水平制表符 | |||
EBNF 1 2 | 垂直制表符/非垂直制表符 | |||
| 序列和选择 | EBNF 1 2 3 | 任何 x 中的字符串,后面跟随任何 y 中的字符串 |
| 表示没有前导零的正整数 |
EBNF 1 2 3 | 任何 x 或 y 中的字符串 | http|ftp | “http” 或 “ftp” | |
| 群组 | EBNF | 匹配 expr,并捕获匹配以便后续引用 | '([^']*)' | 捕获的是被引用的文本 |
EBNF 1 2 | 引用第 n 组 | (['"])\w*\1 | 匹配 “'Fred'” 或 “"Fred"”,但是不匹配 “"Fred'” | |
EBNF | 匹配 expr,并捕获匹配将其命名为 name 以便后续引用 | '(?<id>[A-Za-z0-9]+)' | ||
EBNF | 引用给定名字的组 | \k<id> | 可以匹配名字为 id 的组 | |
EBNF | 匹配 expr,但不捕获 | (?:http|ftp)://(.*) | 此时 \1 引用的是 :// 之后的内容 | |
EBNF 1 2 | 使用指定的标志匹配 expr,不捕获 | (?i:jpe?g) | 大小写不敏感的 “jpg”、“jpeg” 匹配 | |
EBNF | 正向肯定预查 expr,不消费匹配 | middle(?=_tail) | 匹配 “middle_tail” 中的 “middle” | |
EBNF | 正向否定预查 expr,不消费匹配 | middle(?!_tail) | 匹配 “middle_other” 中的 “middle”,但不匹配 “middle_tail” | |
EBNF | 反向肯定预查 expr,不消费匹配 | (?<=head_)middle | 匹配 “head_middle” 中的 “middle” | |
EBNF | 反向否定预查 expr,不消费匹配 | (?<!head_)middle | 匹配 “other_middle” 中的 “middle”,但不匹配 “head_middle” | |
| 量词 | EBNF | 可选 expr | Win(?:10)? | 匹配 “Win10” 或 “Win” |
EBNF 1 2 | 重复匹配 expr |
| 大于等于 10 的整数 | |
EBNF 1 2 3 4 5 | 指定次数重复匹配 expr | [0-7]{1,3} | 一到三位的八进制数 | |
EBNF | 非贪婪模式,尽可能少的匹配 | <.+?> | 捕获尖括号括起来的最短序列 | |
EBNF | 贪婪模式,尽可能多的匹配 | '[^']*+' | 匹配单引号引起来的字符串 | |
| 边界匹配 | EBNF 1 2 | 输入的开头和结尾(或者多行模式中的开头和结尾行) | ||
EBNF 1 2 3 | 输入的开头,输入的结尾,输入的绝对结尾(在多行模式中不会发生变化) | |||
EBNF 1 2 | 单词边界,非单词边界 | d\b | 匹配 “word boundaries” 中的第四个字符 “d” | |
EBNF | Unicode 行分隔符 | |||
EBNF | 前一个匹配的结尾 |
上表中的基础表达式:
EBNF
expr = ? expression ?;
q expr = ? quantified expression ?;
char = ? all visible characters ?;
name = ? capturing group name ?;
predefined = ? regex predefined character classes ?;
flag = ? regex flags ?;
positive integer = [digit - "0"], digit, { digit };
hex = digit | "A" | "B" | "C" | "D" | "E" | "F"
| "a" | "b" | "c" | "d" | "e" | "f";
oct = digit - "8" - "9";
letter = uppercase | lowercase;
uppercase = "A" | "B" | "C" | "D" | "E" | "F" | "G" | "H" | "I"
| "J" | "K" | "L" | "M" | "N" | "O" | "P" | "Q" | "R"
| "S" | "T" | "U" | "V" | "W" | "X" | "Y" | "Z";
lowercase = "a" | "b" | "c" | "d" | "e" | "f" | "g" | "h" | "i"
| "j" | "k" | "l" | "m" | "n" | "o" | "p" | "q" | "r"
| "s" | "t" | "u" | "v" | "w" | "x" | "y" | "z";
digit = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9";1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Tip:嵌套的群组是按照前括号排序的。
2. 预定义类
以下是一些与 \p 一起使用的常见预定义类(predefined character classes):
\p{L}:匹配任何字母字符。这包括各种语言中的字母,如英文、中文、日文等;\p{N}:匹配任何数字字符。这包括 0-9 的数字字符,以及其他语言中的数字字符;\p{P}:匹配任何标点字符。这包括常见的标点符号,如句号、逗号、分号等;\p{S}:匹配任何符号字符。这包括数学符号、货币符号等;\p{M}:匹配任何标记字符,如音调标记、重音符号等;\p{Z}:匹配任何分隔符字符,如空格、制表符等;\p{C}:匹配任何控制字符;\p{Lu}:匹配任何大写字母字符;\p{Ll}:匹配任何小写字母字符;\p{Lt}:匹配任何标题字母字符,例如首字母大写的字母;\p{Lo}:匹配任何其他字母字符,如汉字、阿拉伯字母等;\p{Nl}:匹配任何字母数字字符,通常用于表示编号或编号样式;\p{No}:匹配任何其他数字字符,如罗马数字、分数、上标数字等;\p{Sm}:匹配任何数学符号,如各种数学操作、运算符号以及其他与数学相关的符号;\p{Pc}:匹配任何连接符号,例如下划线;\p{Pd}:匹配任何破折号类型的字符,例如连字符;\p{Ps}:匹配任何起始括号字符,例如左圆括号;\p{Pe}:匹配任何结束括号字符,例如右圆括号;
这些是一些常见的与 \p 一起使用的预定义类。请注意,正则表达式引擎的具体实现可能会在支持 Unicode 属性方面有所不同,因此在使用时要查看您所使用的编程语言或工具的文档以获取更详细的信息。