正则表达式
type
status
date
slug
summary
tags
category
icon
password
一、正则表达式概述
正则表达式是由一类特殊字符(元字符)组成的表达式,用于匹配具有相同特征的文本。它是文本处理中非常强大的工具,广泛应用于搜索、替换和验证文本内容。
二、匹配单个字符的元字符
元字符 | 说明 | 示例 |
. | 匹配任意单个字符 | r..t 匹配 root、rabt 等 |
[abc] | 匹配方括号中的任意一个字符 | [rkt] 匹配 r、k 或 t |
[a-z] | 匹配任意小写字母 | [a-z] 匹配 a 到 z 的任意字母 |
[A-Z] | 匹配任意大写字母 | [A-Z] 匹配 A 到 Z 的任意字母 |
[0-9] | 匹配任意数字 | [0-9] 匹配 0 到 9 的任意数字 |
[a-zA-Z0-9] | 匹配任意字母或数字 | 匹配所有字母和数字 |
[^a-z] | 匹配不在指定范围内的字符 | 匹配非小写字母的字符 |
三、匹配字符出现次数的元字符
元字符 | 说明 | 示例 |
* | 前一个字符出现0次或多次 | ab* 匹配 a、ab、abb 等 |
? | 前一个字符出现0次或1次 | a[0-9]?b 匹配 ab、a0b 等 |
+ | 前一个字符至少出现1次 | a[0-9]+b 匹配 a0b、a123b 等 |
{n} | 前一个字符精确出现n次 | a[0-9]{3}b 匹配 a123b 等 |
{n,} | 前一个字符至少出现n次 | a[0-9]{2,}b 匹配 a12b、a123b 等 |
{n,m} | 前一个字符出现n到m次 | a[0-9]{2,4}b 匹配 a12b、a123b、a1234b |
四、匹配字符位置的元字符
元字符 | 说明 | 示例 |
^ | 匹配行首 | ^[0-9] 匹配以数字开头的行 |
$ | 匹配行尾 | bash$ 匹配以 bash 结尾的行 |
^$ | 匹配空行 | 匹配不包含任何字符的行 |
五、分组与捕获
元字符 | 说明 | 示例 |
( ) | 分组,可对组内内容应用量词 | (ab){2} 匹配 abab |
六、补充知识点
- 转义字符:使用
\\来转义特殊字符,例如\\.匹配实际的点号而不是任意字符
- 或操作:使用
|表示或操作,例如(a|b)匹配 a 或 b
- 预定义字符类:
\\d匹配数字,相当于[0-9]\\D匹配非数字,相当于[^0-9]\\w匹配单词字符,相当于[a-zA-Z0-9_]\\W匹配非单词字符\\s匹配空白字符(空格、制表符、换行符等)\\S匹配非空白字符
- 非贪婪匹配:在量词后加
?进行非贪婪匹配,例如.*?匹配尽可能少的字符
- 正向/负向前瞻:
(?=exp)正向前瞻,匹配后面是 exp 的位置(?!exp)负向前瞻,匹配后面不是 exp 的位置
七、常见错误与修正
- 字符范围错误:
[A-z]实际上会匹配 ASCII 表中介于 A 和 z 之间的所有字符,包括[\\]^_等特殊字符。正确做法是使用[A-Za-z]来匹配所有字母。
- 量词使用错误:在基本正则表达式中,
{n}、{n,}、{n,m}需要转义,即\\{n\\}、\\{n,\\}、\\{n,m\\}。在扩展正则表达式(使用E选项或egrep)中不需要转义。
- 分组使用错误:在基本正则表达式中,
( )需要转义,即\\( \\)。在扩展正则表达式中不需要转义。
八、实用示例
- 匹配邮箱地址:
[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}
- 匹配 URL:
https?://[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}(/[^ ]*)?
- 匹配日期(YYYY-MM-DD):
[0-9]{4}-[0-9]{2}-[0-9]{2}
- 匹配 IP 地址:
([0-9]{1,3}\\.){3}[0-9]{1,3}
九、常用工具中的正则表达式
- grep:默认使用基本正则表达式,
E选项使用扩展正则表达式
- sed:默认使用基本正则表达式,
E选项(某些版本)使用扩展正则表达式
- awk:使用扩展正则表达式
- Perl/Python:使用更强大的 Perl 兼容正则表达式(PCRE)
Loading...