基础语法

正则表达式(Regular Expression)是一种强大的文本匹配工具,用于在字符串中查找、替换或验证特定的模式。

什么是正则表达式?

正则表达式是由普通字符和特殊字符组成的模式,用于描述字符串的匹配规则。

简单示例:
hello - 匹配字符串 "hello"
\d - 匹配任意数字
[a-z] - 匹配任意小写字母

基本组成

  • 普通字符:直接匹配字符本身
  • 元字符:具有特殊含义的字符
  • 量词:指定匹配次数
  • 字符类:匹配一组字符中的任意一个

元字符

元字符是正则表达式中具有特殊含义的字符,需要转义才能匹配字符本身。

元字符 含义 示例
. 匹配任意字符(除换行符) a.c 匹配 "abc", "a1c"
^ 匹配字符串开始 ^hello 匹配以 "hello" 开头的字符串
$ 匹配字符串结束 world$ 匹配以 "world" 结尾的字符串
\ 转义字符 \. 匹配点号 "."
| 或操作 cat|dog 匹配 "cat" 或 "dog"

量词

量词用于指定匹配的次数。

量词 含义 示例
* 匹配0次或多次 a* 匹配 "", "a", "aa", "aaa"
+ 匹配1次或多次 a+ 匹配 "a", "aa", "aaa"
? 匹配0次或1次 a? 匹配 "", "a"
{n} 匹配n次 a{3} 匹配 "aaa"
{n,} 匹配n次或更多 a{2,} 匹配 "aa", "aaa"
{n,m} 匹配n到m次 a{2,4} 匹配 "aa", "aaa", "aaaa"

字符类

字符类用于匹配一组字符中的任意一个。

基本字符类:
[abc] - 匹配 a、b 或 c
[a-z] - 匹配任意小写字母
[A-Z] - 匹配任意大写字母
[0-9] - 匹配任意数字
预定义字符类:
\d - 匹配数字,等同于 [0-9]
\w - 匹配字母、数字、下划线
\s - 匹配空白字符
\D - 匹配非数字

分组

分组用于将多个字符组合成一个整体,并可以捕获匹配的内容。

基本分组:
(abc) - 将 abc 作为一个整体
(abc)+ - 匹配一个或多个 "abc"
捕获组:
(\d{3})-(\d{3})-(\d{4}) - 匹配电话号码并捕获各部分
非捕获组:
(?:abc) - 分组但不捕获

锚点

锚点用于指定匹配的位置。

行首和行尾:
^start - 匹配行首的 "start"
end$ - 匹配行尾的 "end"
^start.*end$ - 匹配以 "start" 开头、以 "end" 结尾的行
单词边界:
\bword\b - 匹配完整的单词 "word"

标志

标志用于修改正则表达式的匹配行为。

常用标志:
g - 全局匹配(匹配所有结果)
i - 忽略大小写
m - 多行模式
s - 单行模式(. 匹配换行符)

高级技巧

掌握一些高级技巧可以让正则表达式更加强大和高效。

正向先行断言:
\d+(?=px) - 匹配后面跟着 "px" 的数字
负向先行断言:
\d+(?!px) - 匹配后面不跟 "px" 的数字
反向引用:
(\w)\1 - 匹配重复的字符

实战练习

通过实际练习来巩固所学知识。

练习1:邮箱验证

编写正则表达式验证邮箱地址格式。

参考答案: ^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$
练习2:手机号验证

编写正则表达式验证中国大陆手机号。

参考答案: ^1[3-9]\d{9}$
练习3:提取HTML标签

编写正则表达式提取HTML标签。

参考答案: <(\w+)>.*?</\1>