张芷铭的个人博客

正则表达式

正则表达式(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("匹配成功");

}

  

**总结**

  

正则表达式是强大的字符串处理工具,熟悉常见的元字符和语法规则是掌握正则的关键。实践中,根据需求灵活组合规则可以实现高效的文本匹配与处理。

💬 评论