正则表达式详解

正则表达式是一种强大的文本模式匹配工具,广泛应用于各种编程语言和文本处理软件中。它可以用来搜索、替换和验证文本。本文将介绍正则表达式的常用语法、示例以及一些常用表达式。

一、正则表达式基础

1. 字符匹配

  • 普通字符:直接匹配自身。例如,正则表达式apple可以匹配字符串中的apple
  • 特殊字符:具有特殊含义,如.*?+()[]{}|等。需要使用反斜杠\进行转义才能匹配其本身。例如,\*匹配*字符。

2. 元字符

  • .:匹配任意单个字符。例如,a.ple可以匹配appleample等。
  • \d:匹配一个数字字符。例如,\d\d-\d\d-\d\d\d\d可以匹配日期格式,如12-30-2023
  • \w:匹配一个字母、数字或下划线字符。例如,\w\w\w\w可以匹配abcda12_等。
  • \s:匹配一个空白字符,包括空格、制表符、换行符等。例如,Hello\sWorld可以匹配Hello World

3. 量词

  • *:匹配前面的字符零次或多次。例如,a*b可以匹配babaab等。
  • +:匹配前面的字符一次或多次。例如,a+b可以匹配abaab等,但不能匹配b
  • ?:匹配前面的字符零次或一次。例如,a?b可以匹配bab
  • {n}:匹配前面的字符恰好n次。例如,a{3}b可以匹配aaab
  • {n,}:匹配前面的字符至少n次。例如,a{2,}b可以匹配aabaaab等。
  • {n,m}:匹配前面的字符至少n次,至多m次。例如,a{2,4}b可以匹配aabaaabaaaab

4. 分组和捕获

  • ():用于分组。可以将多个字符组合在一起作为一个整体进行匹配。例如,(ab)+c可以匹配abcababc等。
  • (?:):非捕获分组。与普通分组类似,但不会捕获匹配的内容。例如,(?:ab)+c只匹配abcababc等,但不会捕获ab
  • \1\2等:引用捕获组。可以在正则表达式中引用之前捕获的内容。例如,(\w)\1可以匹配aabb等。

5. 锚点

  • ^:匹配字符串的开头。例如,^Hello只能匹配以Hello开头的字符串。
  • $:匹配字符串的结尾。例如,World$只能匹配以World结尾的字符串。

二、正则表达式示例

1. 验证电子邮件地址

regex
1
^\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$

这个正则表达式可以验证一个字符串是否是有效的电子邮件地址。它匹配以字母、数字或下划线开头,后面跟着零个或多个由连字符、加号、点号或单引号分隔的字母、数字或下划线,然后是一个@符号,接着是一个或多个由连字符或点号分隔的域名部分,最后是一个点号和一个顶级域名。

例如:

python
1
2
3
4
5
6
7
8
import re

email = "test@example.com"
pattern = r"^\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$"
if re.match(pattern, email):
    print("Valid email address")
else:
    print("Invalid email address")

2. 提取电话号码

regex
1
\d{3}-\d{3}-\d{4}

这个正则表达式可以匹配美国电话号码格式,即三个数字、一个连字符、三个数字、一个连字符和四个数字。

例如:

python
1
2
3
4
5
6
import re

text = "My phone number is 123-456-7890."
pattern = r"\d{3}-\d{3}-\d{4}"
matches = re.findall(pattern, text)
print(matches)

3. 匹配 HTML 标签

regex
1
<(\w+)\b[^>]*>(.*?)</\1>

这个正则表达式可以匹配 HTML 标签,包括开始标签和结束标签,并捕获标签名和标签内容。

例如:

python
1
2
3
4
5
6
import re

html = "<p>This is a paragraph.</p>"
pattern = r"<(\w+)\b[^>]*>(.*?)</\1>"
matches = re.findall(pattern, html)
print(matches)

三、常用正则表达式

1. 用户名

  • 字母、数字、下划线组成,长度为 3 到 20 个字符:^\w{3,20}$

2. 密码

  • 至少包含一个大写字母、一个小写字母、一个数字和一个特殊字符,长度为 8 到 20 个字符:^(?=.*[A-Z])(?=.*[a-z])(?=.*\d)(?=.*[!@#$%^&*])\w{8,20}$

3. URL

  • 匹配基本的 URL 格式:^(https?|ftp)://[^\s/$.?#].[^\s]*$

4. 日期

  • 匹配 YYYY-MM-DD 格式的日期:^\d{4}-\d{2}-\d{2}$

5. 整数

  • 匹配整数:^\d+$

6. 浮点数

  • 匹配浮点数:^\d+\.\d+$

四、总结

正则表达式是一种非常强大的工具,可以用于各种文本处理任务。本文介绍了正则表达式的常用语法、示例以及一些常用表达式。掌握正则表达式可以提高文本处理的效率和准确性。在实际应用中,可以根据具体需求灵活运用正则表达式,以实现更复杂的文本匹配和处理任务。