文章目录
- 一、正则表达式基础知识
- 1.特殊字符(Metacharacters)
- 2.字符类(Character Classes)
- 3.预定义字符集(Predefined character classes)
- 4.分组(Groups)
- 5.量词(Quantifiers)
- 6.断言(Assertions)
- 二、案例:校验输入的手机号码
- 1.代码块
- 2.解释说明
- 三、案例:校验电子邮箱
- 1.代码块
- 2.解释说明
一、正则表达式基础知识
正则表达式(Regular Expression,简称regex或regexp)是一种文本模式描述的工具,它可以用来检索、替换符合某个模式的文本。正则表达式由一系列字符组成,这些字符可以是普通字符(例如,字母a到z)、特殊字符(称为"元字符")或两者的组合。
1.特殊字符(Metacharacters)
.
:匹配任意单个字符(除了换行符)。^
:匹配输入字符串的开始位置。$
:匹配输入字符串的结束位置。*
:匹配前面的子表达式零次或多次。+
:匹配前面的子表达式一次或多次。?
:匹配前面的子表达式零次或一次。{n}
:匹配确定的n次。{n,}
:至少匹配n次。{n,m}
:最少匹配n次且最多m次。[]
:匹配括号内的任意字符(字符集)。|
:匹配两项之间的任意一项(选择)。\
:转义特殊字符或表示特殊序列的开始。
2.字符类(Character Classes)
[abc]
:匹配任何一个字符a、b或c。[a-z]
:匹配任何一个小写字母。[A-Z]
:匹配任何一个大写字母。[0-9]
:匹配任何一个数字。[a-zA-Z]
:匹配任何一个字母。
3.预定义字符集(Predefined character classes)
\d
:匹配任何一个数字,等同于[0-9]
。\D
:匹配任何非数字字符。\w
:匹配任何字母数字字符,包括下划线,等同于[a-zA-Z0-9_]
。\W
:匹配任何非字母数字字符。
4.分组(Groups)
(...)
:将多个表达式组合成一个子表达式,可以对整个组应用量词。
5.量词(Quantifiers)
*
:匹配0次或多次。+
:匹配1次或多次。?
:匹配0次或1次。{n}
:匹配恰好n次。{n,}
:至少匹配n次。{n,m}
:最少匹配n次且最多m次。
6.断言(Assertions)
^
:匹配输入字符串的开始。$
:匹配输入字符串的结束。(?=...)
:正向前瞻断言,匹配…前面的位置。(?!...)
:负向前瞻断言,匹配除了…外的任何位置。(?<=...)
:正向后瞻断言,匹配…后面的位置。(?<!...)
:负向后瞻断言,匹配除了…外的任何位置。
正则表达式非常强大,但同时也可能变得复杂。不同的编程语言和工具(如Python、JavaScript、Java、Perl等)都有对正则表达式的支持,但它们的具体实现和语法可能会有所不同。
二、案例:校验输入的手机号码
以下是一个Python函数,当用户输入手机号码时,我们可以使用正则表达式来校验中国大陆的手机号码:
1.代码块
import re
def validate_chinese_mobile(phone_number):
"""
校验中国大陆的手机号码。
参数:
phone_number (str): 待校验的手机号码。
返回:
bool: 如果手机号码有效,返回True;否则返回False。
"""
# 正则表达式匹配中国大陆的手机号码
pattern = re.compile(r'^1[3-9]\d{9}$')
return pattern.match(phone_number) is not None
# 测试手机号码
test_numbers = [
'13800138000', # 有效的手机号码
'23800138000', # 无效的手机号码,第二位数字不是3-9中的一个
'12345678901', # 无效的手机号码,以1开头但只有10位数字
'+8613800138000', # 可能有效的手机号码,带有国家代码
'1380001380000', # 无效的手机号码,以1开头但有12位数字
'138 0013 8000', # 无效的手机号码,包含空格
'1380013800a', # 无效的手机号码,包含非法字符
]
for number in test_numbers:
print(f"手机号码 {number} 校验结果:{validate_chinese_mobile(number)}")
2.解释说明
^
:匹配字符串的开始。1
:匹配数字1。[3-9]
:匹配数字3到9之间的任何一个数字。\d{9}
:匹配恰好9个数字。$
:匹配字符串的结束。
这个正则表达式确保手机号码中只包含数字,并且符合中国大陆手机号码的格式。如果手机号码中包含空格或其他非法字符,校验将失败。
三、案例:校验电子邮箱
使用Python正则表达式校验电子邮箱
1.代码块
import re
def validate_email(email):
"""
校验电子邮箱地址。
参数:
email (str): 待校验的电子邮箱地址。
返回:
bool: 如果电子邮箱地址有效,返回True;否则返回False。
"""
# 正则表达式匹配电子邮箱地址
pattern = re.compile(r'^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$')
return pattern.match(email) is not None
# 测试电子邮箱地址
test_emails = [
'example@example.com', # 有效的电子邮箱
'example.example@com', # 无效的电子邮箱,顶级域名前缺少点
'example@.com', # 无效的电子邮箱,域名中有点在开头
'@example.com', # 无效的电子邮箱,缺少用户名
'example@example', # 无效的电子邮箱,缺少顶级域名
'example@exa_mple.com' # 有效的电子邮箱,域名中包含下划线
]
for email in test_emails:
print(f"电子邮箱 {email} 校验结果:{validate_email(email)}")
2.解释说明
^
:匹配字符串的开始。[a-zA-Z0-9_.+-]+
:匹配一个或多个字母、数字、点、下划线、加号或减号(邮箱用户名部分)。@
:匹配@符号。[a-zA-Z0-9-]+
:匹配一个或多个字母、数字或减号(域名部分)。\.
:匹配点符号。[a-zA-Z0-9-.]+
:匹配一个或多个字母、数字、点或减号(顶级域名部分)。$
:匹配字符串的结束。
这个正则表达式适用于大多数常见的电子邮箱格式,但请注意,由于电子邮箱地址的规范非常复杂,没有单一的正则表达式可以覆盖所有有效或无效的情况。这个表达式提供了一个基本的校验,适用于大多数实际情况。