### 常用正则表达式详解
#### 正则表达式概述
正则表达式是一种强大的文本处理工具,能够帮助我们完成各种复杂的文本匹配、提取、替换等操作。正则表达式的应用非常广泛,例如在编程语言中进行数据验证、在搜索引擎中执行精确查找、在文本处理软件中实现高级文本过滤等功能。
#### 正则表达式的基本结构与语法
正则表达式主要由元字符、字符类、量词等构成,不同的组合可以构建出复杂多样的匹配规则。
- **元字符**:如`^`表示行首,`$`表示行尾。
- **字符类**:如`\d`匹配任意数字,`\w`匹配字母、数字或下划线。
- **量词**:如`*`表示零次或多次,`+`表示一次或多次,`{m,n}`表示至少m次最多n次。
接下来,我们将详细介绍几个常见的正则表达式及其应用场景:
#### 1. 验证网址(URL)
```
[a-zA-z]+://[^\s]*
```
- **解析**:
- `[a-zA-z]+`:匹配一个或多个字母,用于匹配协议前缀如`http`、`ftp`等。
- `://`:匹配`://`。
- `[^\s]*`:匹配任何非空格字符,用于匹配域名及路径。
#### 2. 验证IP地址
```
((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)
```
- **解析**:
- `(2[0-4]\d|25[0-5]|[01]?\d\d?)`:匹配范围为0到255的数字。
- `\.`:匹配`.`。
- `{3}`:表示前面的模式重复三次,用于匹配前三个分段。
- 最后一个分段同前三个分段。
#### 3. 验证电子邮件
```
\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
```
- **解析**:
- `\w+`:匹配一个或多个字母、数字或下划线。
- `([-+.]\w+)*`:匹配可选的连字符、加号或点号后面跟着一个或多个字母、数字或下划线。
- `@`:匹配`@`。
- 后面的部分与前面类似,但注意域名中的`.`。
#### 4. 验证QQ号码
```
[1-9]\d{4,}
```
- **解析**:
- `[1-9]`:匹配1到9之间的任一数字。
- `\d{4,}`:匹配四位或更多位数字。
- QQ号码必须以非0数字开头,并且长度至少为5位。
#### 5. 匹配HTML标记
```
<(.*)(.*)>.*<\/\1>|<(.*) \/>
```
- **解析**:
- `<(.*)(.*)>`:匹配起始标签,其中`.*`表示任何字符。
- `.*<\/\1>`:匹配标签内容及闭合标签,其中`<\1>`表示与起始标签相同的闭合标签。
- `<(.*) \/>`:匹配自闭合标签。
#### 6. 密码规则
```
(?=^.{8,}$)(?=.*\d)(?=.*\W+)(?=.*[A-Z])(?=.*[a-z])(?!.*\n).*
```
- **解析**:
- `(?=^.{8,}$)`:确保整个字符串长度至少为8位。
- `(?=.*\d)`:确保包含至少一位数字。
- `(?=.*\W+)`:确保包含至少一个特殊字符。
- `(?=.*[A-Z])`:确保包含至少一个大写字母。
- `(?=.*[a-z])`:确保包含至少一个小写字母。
- `(?!.*\n)`:不允许出现换行符。
#### 7. 日期格式
- **年-月-日**:
```
(\d{4}|\d{2})-((0?([1-9]))|(1[1|2]))-((0?[1-9])|([12]([1-9]))|(3[0|1]))
```
- **解析**:
- `(\d{4}|\d{2})`:匹配两位或四位的年份。
- `-`:匹配`-`。
- `((0?([1-9]))|(1[1|2]))`:匹配1到12之间的月份。
- `((0?[1-9])|([12]([1-9]))|(3[0|1]))`:匹配1到31之间的天数。
- **月/日/年**:
```
((0?[1-9]{1})|(1[1|2]))/(0?[1-9]|([12][1-9])|(3[0|1]))/(\d{4}|\d{2})
```
- **解析**:
- `((0?[1-9]{1})|(1[1|2]))`:匹配1到12之间的月份。
- `/`:匹配`/`。
- `(0?[1-9]|([12][1-9])|(3[0|1]))`:匹配1到31之间的天数。
- `(\d{4}|\d{2})`:匹配两位或四位的年份。
#### 8. 时间格式(24小时制)
```
((1|0?)[0-9]|2[0-3]):([0-5][0-9])
```
- **解析**:
- `((1|0?)[0-9]|2[0-3])`:匹配00到23之间的小时数。
- `:`:匹配`:`。
- `([0-5][0-9])`:匹配00到59之间的分钟数。
#### 9. 匹配汉字
```
[\u4e00-\u9fa5]
```
- **解析**:
- `[\u4e00-\u9fa5]`:匹配Unicode编码范围内所有汉字。
#### 10. 匹配中文及全角标点符号
```
[\u3000-\u301e\ufe10-\ufe19\ufe30-\ufe44\ufe50-\ufe6b\uff01-\uffee]
```
- **解析**:
- `[\u3000-\u9fa5]`:匹配Unicode编码范围内所有中文全角标点符号。
#### 11. 中国大陆固定电话号码
```
(\d{4}-|\d{3}-)?(\d{8}|\d{7})
```
- **解析**:
- `(\d{4}-|\d{3}-)?`:匹配区号,可选。
- `(\d{8}|\d{7})`:匹配7位或8位的电话号码。
#### 12. 中国大陆手机号码
```
1\d{10}
```
- **解析**:
- `1`:匹配手机号码首位数字1。
- `\d{10}`:匹配10位数字。
#### 13. 中国大陆邮政编码
```
[1-9]\d{5}
```
- **解析**:
- `[1-9]`:匹配非0数字。
- `\d{5}`:匹配五位数字。
#### 14. 中国大陆身份证号
```
15\d{15}(\d\d[0-9xX])?
```
- **解析**:
- `15\d{15}`:匹配15位数字。
- `(\d\d[0-9xX])?`:匹配最后两位数字或校验码,可选。
#### 15. 非负整数
```
\d+
```
- **解析**:
- `\d+`:匹配一个或多个数字。
#### 16. 正整数
```
[0-9]*[1-9][0-9]*
```
- **解析**:
- `[0-9]*`:匹配零个或多个数字。
- `[1-9]`:匹配1到9之间的数字。
- `[0-9]*`:匹配零个或多个数字。
#### 17. 负整数
```
-[0-9]*[1-9][0-9]*
```
- **解析**:
- `-`:匹配负号。
- `[0-9]*[1-9][0-9]*`:匹配正整数部分。
#### 18. 整数
```
-?\d+
```
- **解析**:
- `-?`:匹配可选的负号。
- `\d+`:匹配一个或多个数字。
#### 19. 小数
```
(-?\d+)(\.\d+)?
```
- **解析**:
- `(-?\d+)`:匹配整数部分,包括可选的负号。
- `(\.\d+)?`:匹配小数部分,可选。
以上列举了一些常用的正则表达式,每种都有其特定的应用场景。在实际使用时,还需要根据具体情况调整和完善正则表达式,以满足更加精确的需求。