正则表达式(Regular Expression,简称 Regex 或 RegExp)是一种用来匹配字符串的模式,广泛应用于文本搜索、文本替换、数据验证等场景。正则表达式由普通字符和特殊字符(元字符)组成,通过定义特定的匹配规则,可以对字符串进行复杂的模式匹配和处理。
基本组成部分
1. 普通字符
普通字符直接匹配其自身,例如:
- 正则表达式
abc匹配字符串"abc"。
2. 元字符
元字符是具有特殊意义的字符,用于构造复杂的匹配规则。常见元字符包括:
.匹配任意单个字符(除了换行符)。^匹配字符串的开头。$匹配字符串的结尾。*匹配前一个字符零次或多次。+匹配前一个字符一次或多次。?匹配前一个字符零次或一次。{n}精确匹配前一个字符 n 次。{n,}匹配前一个字符至少 n 次。{n,m}匹配前一个字符至少 n 次且至多 m 次。|逻辑“或”,匹配左右任意一个表达式。()用于分组,捕获匹配内容。[]字符集,匹配方括号内的任意字符。\转义符,用于转义元字符或匹配特殊字符。
示例
匹配单个字符
a匹配字符"a"。.匹配任意单个字符,例如"a","1","#"。
匹配多字符
ab*匹配以"a"开头,后跟零个或多个"b"的字符串,例如"a","ab","abbb"。a(bc)+匹配以"a"开头,后跟一个或多个"bc"的字符串,例如"abc","abcbc"。
使用字符集
[aeiou]匹配任意一个元音字母。[0-9]匹配任意一个数字。[a-zA-Z]匹配任意一个英文字母(大小写均可)。
边界匹配
^The匹配以"The"开头的字符串。end$匹配以"end"结尾的字符串。
转义
\.匹配一个点号.。\\匹配一个反斜杠\。
高级特性
1. 分组与捕获
使用括号 () 创建分组:
(abc)+匹配一个或多个"abc",如"abc","abcabc"。捕获组的内容可以在替换时引用,例如
\1表示第一个分组。
2. 非捕获分组
(?:abc)创建非捕获组,仅用于匹配,不保存内容。
3. 断言
断言用于指定某个条件是否成立:
正向前瞻:
(?=abc)匹配后面跟"abc"的位置。负向前瞻:
(?!abc)匹配后面不跟"abc"的位置。正向后瞻:
(?<=abc)匹配前面是"abc"的位置。负向后瞻:
(?<!abc)匹配前面不是"abc"的位置。
常见正则表达式应用
1. 匹配邮箱
^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$
**2. 匹配手机号(中国)**
^1[3-9]\d{9}$
**3. 匹配日期(YYYY-MM-DD 格式)**
^\d{4}-\d{2}-\d{2}$
**4. 匹配 URL**
^(https?://)?(www\.)?[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}(/.*)?$
**使用正则表达式的编程语言支持**
**Python 示例**
import re
# 匹配
pattern = r'\d+'
string = "123abc456"
matches = re.findall(pattern, string)
print(matches) # 输出: ['123', '456']
# 替换
replaced = re.sub(r'abc', 'XYZ', string)
print(replaced) # 输出: "123XYZ456"
# 验证
if re.match(r'^\d+$', '12345'):
print("匹配成功")
**JavaScript 示例**
const regex = /\d+/g;
const str = "123abc456";
// 匹配
const matches = str.match(regex);
console.log(matches); // 输出: ['123', '456']
// 替换
const replaced = str.replace(/abc/, "XYZ");
console.log(replaced); // 输出: "123XYZ456"
// 验证
if (/^\d+$/.test("12345")) {
console.log("匹配成功");
}
**总结**
正则表达式是强大的字符串处理工具,熟悉常见的元字符和语法规则是掌握正则的关键。实践中,根据需求灵活组合规则可以实现高效的文本匹配与处理。
💬 评论