正则表达式

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

六、补充知识点

  1. 转义字符:使用 \\ 来转义特殊字符,例如 \\. 匹配实际的点号而不是任意字符
  1. 或操作:使用 | 表示或操作,例如 (a|b) 匹配 a 或 b
  1. 预定义字符类
      • \\d 匹配数字,相当于 [0-9]
      • \\D 匹配非数字,相当于 [^0-9]
      • \\w 匹配单词字符,相当于 [a-zA-Z0-9_]
      • \\W 匹配非单词字符
      • \\s 匹配空白字符(空格、制表符、换行符等)
      • \\S 匹配非空白字符
  1. 非贪婪匹配:在量词后加 ? 进行非贪婪匹配,例如 .*? 匹配尽可能少的字符
  1. 正向/负向前瞻
      • (?=exp) 正向前瞻,匹配后面是 exp 的位置
      • (?!exp) 负向前瞻,匹配后面不是 exp 的位置

七、常见错误与修正

  1. 字符范围错误[A-z] 实际上会匹配 ASCII 表中介于 A 和 z 之间的所有字符,包括 [\\]^_ 等特殊字符。正确做法是使用 [A-Za-z] 来匹配所有字母。
  1. 量词使用错误:在基本正则表达式中,{n}{n,}{n,m} 需要转义,即 \\{n\\}\\{n,\\}\\{n,m\\}。在扩展正则表达式(使用 E 选项或 egrep)中不需要转义。
  1. 分组使用错误:在基本正则表达式中,( ) 需要转义,即 \\( \\)。在扩展正则表达式中不需要转义。

八、实用示例

  1. 匹配邮箱地址:[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}
  1. 匹配 URL:https?://[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}(/[^ ]*)?
  1. 匹配日期(YYYY-MM-DD):[0-9]{4}-[0-9]{2}-[0-9]{2}
  1. 匹配 IP 地址:([0-9]{1,3}\\.){3}[0-9]{1,3}

九、常用工具中的正则表达式

  1. grep:默认使用基本正则表达式,E 选项使用扩展正则表达式
  1. sed:默认使用基本正则表达式,E 选项(某些版本)使用扩展正则表达式
  1. awk:使用扩展正则表达式
  1. Perl/Python:使用更强大的 Perl 兼容正则表达式(PCRE)
Loading...