Regex
1. 字符类 (Character Classes)
| 语法 | 说明 | 等价于 |
|---|---|---|
. | 匹配换行符外的任意单字符 | [^\n\r] |
\d | 匹配数字 | [0-9] |
\D | 匹配非数字 | [^0-9] |
\w | 匹配字母、数字或下划线 | [A-Za-z0-9_] |
\W | 匹配非单词字符 | [^A-Za-z0-9_] |
\s | 匹配空白符 | [ \t\n\r\f\v] |
\S | 匹配非空白符 | [^ \t\n\r\f\v] |
[ABC] | 匹配括号内任意单字符 | - |
[^ABC] | 匹配括号内字符外的任意单字符 | - |
2. 量词 (Quantifiers)
| 语法 | 说明 |
|---|---|
* | 匹配 0 次或多次 |
+ | 匹配 1 次或多次 |
? | 匹配 0 次或 1 次 |
{n} | 匹配确切 n 次 |
{n,} | 匹配至少 n 次 |
{n,m} | 匹配 n 到 m 次 |
注:默认贪婪匹配(匹配最大长度)。在量词后追加
?(如*?、+?)切换为懒惰匹配(匹配最小长度)。
3. 定位符 (Anchors)
| 语法 | 说明 |
|---|---|
^ | 匹配字符串开头 |
$ | 匹配字符串结尾 |
\b | 匹配单词边界 |
\B | 匹配非单词边界 |
4. 分组与逻辑 (Groups & Logic)
4.1 逻辑与转义
| 语法 | 说明 |
|---|---|
| | 逻辑或(如 a|b 匹配 “a” 或 “b”) |
\ | 转义字符(如 \. 匹配字面量 “.") |
4.2 捕获分组: ( )
创建捕获组,按左括号出现顺序从 1 自动编号。可通过 \1 反向引用。
REGEX
\b(\w+)\s+\1\b- 目标: 匹配连续重复的单词(如
test test)。 - 解析:
(\w+)为分组 1,\1匹配与分组 1 内容完全相同的文本。
4.3 非捕获分组: (?: )
应用逻辑组合或量词,但不分配捕获组编号,不保存匹配结果。
REGEX
^http(?:s)?:\/\/- 目标: 匹配
http://或https://。 - 解析:
(?:s)独立作用于量词?,不计入捕获组内存。
4.4 命名捕获分组: (?<name> )
为捕获组显式命名标识符,便于代码提取。
REGEX
(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})- 目标: 匹配并提取
YYYY-MM-DD格式日期。 - 解析: 将子串分别捕获至名为
year、month、day的分组。 - 引用: 正则内部的反向引用通常使用
\k<name>(PCRE/JS) 或(?P=name)(Python)。
5. 常规示例 (Common Examples)
5.1 电子邮箱
REGEX
^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,6}$5.2 中国大陆手机号
REGEX
^1[3-9]\d{9}$5.3 IPv4 地址
REGEX
^(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)$5.4 URL
REGEX
^https?:\/\/[\w\-]+(?:\.[\w\-]+)+(?:[\w\-\.,@?^=%&:\/~\+#]*[\w\-\@?^=%&\/~\+#])?$5.5 中国大陆身份证号(18位)
REGEX
^[1-9]\d{5}(?:18|19|20)\d{2}(?:0[1-9]|1[0-2])(?:0[1-9]|[12]\d|3[01])\d{3}[\dX]$6. 附录:Linux 通配符 (Wildcards)
注:通配符常用于 Shell 文件名匹配(Globbing),与纯正则表达式语义不同。
| 语法 | 说明 | 示例 |
|---|---|---|
* | 匹配 0 个或多个任意字符 | *.txt |
? | 匹配确切 1 个任意字符 | file?.txt |
[chars] | 匹配方括号内任意单字符 | [abc].log |
[a-z] | 匹配指定范围的任意单字符 | test[0-9].sh |
[!chars] / [^chars] | 匹配非括号内的任意单字符 | [!0-9].txt |
{a,b} | 展开组合项 (大括号扩展) | rm *.{jpg,png} |