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 格式日期。
  • 解析: 将子串分别捕获至名为 yearmonthday 的分组。
  • 引用: 正则内部的反向引用通常使用 \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}