正则表达式

发布于:2025-02-11 ⋅ 阅读:(107) ⋅ 点赞:(0)

正则表达式(Regular Expression,简称 Regex)是一种强大的工具,用于匹配、查找和操作文本。它广泛应用于字符串处理、数据验证、文本提取等场景。本文将详细介绍正则表达式的基本概念、语法、用法和示例。

目录

  • 正则表达式简介
  • 正则表达式的基本语法
  • 字符匹配
  • 元字符
  • 量词
  • 分组与捕获
  • 边界匹配
  • 字符类
  • 正则表达式的用法
  • 匹配
  • 查找
  • 替换
  • 分割
  • 正则表达式示例
  • 邮箱验证
  • 手机号验证
  • 提取 URL
  • 替换文本
  • 总结

1. 正则表达式简介

正则表达式是一种描述字符串模式的语法规则。它由普通字符(如字母、数字)和特殊字符(元字符)组成,用于定义匹配规则。正则表达式可以用于:

验证字符串是否符合特定格式(如邮箱、手机号)。
从文本中提取特定内容(如 URL、日期)。
替换文本中的特定部分。

2. 正则表达式的基本语法

字符匹配

  • 普通字符:匹配自身。例如,a 匹配字符 a。
  • 特殊字符:需要转义。例如,. 匹配句号,. 匹配字符 .。

元字符
元字符是正则表达式的核心,用于定义匹配规则:

  • .:匹配任意单个字符(除换行符)。
  • ^:匹配字符串的开头。
  • $:匹配字符串的结尾。
  • \d:匹配数字(等价于 [0-9])。
  • \w:匹配字母、数字或下划线(等价于 [a-zA-Z0-9_])。
  • \s:匹配空白字符(空格、制表符、换行符等)。
  • \b:匹配单词边界。

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

  • *:匹配 0 次或多次。
  • +:匹配 1 次或多次。
  • ?:匹配 0 次或 1 次。
  • {n}:匹配恰好 n 次。
  • {n,}:匹配至少 n 次。
  • {n,m}:匹配 n 到 m 次。

分组与捕获

  • ():将多个字符分组,并捕获匹配的内容。
  • (?😃:非捕获分组,仅分组不捕获。

边界匹配

  • ^:匹配字符串的开头。
  • $:匹配字符串的结尾。
  • \b:匹配单词边界。

字符类

  • []:匹配括号内的任意一个字符。例如,[abc] 匹配 a、b 或 c。
  • []:匹配不在括号内的任意一个字符。例如,[abc] 匹配非 a、b、c 的字符。

3. 正则表达式的用法

匹配
使用 Regex.IsMatch 方法检查字符串是否匹配正则表达式。

using System.Text.RegularExpressions;

string pattern = @"\d+"; // 匹配一个或多个数字
string input = "123abc";
bool isMatch = Regex.IsMatch(input, pattern); // true

查找
使用 Regex.Match 或 Regex.Matches 方法查找匹配的内容。

string pattern = @"\d+";
string input = "123abc456";
Match match = Regex.Match(input, pattern); // 匹配第一个结果
Console.WriteLine(match.Value); // 输出 "123"

MatchCollection matches = Regex.Matches(input, pattern); // 匹配所有结果
foreach (Match m in matches)
{
    Console.WriteLine(m.Value); // 输出 "123" 和 "456"
}

替换
使用 Regex.Replace 方法替换匹配的内容。

string pattern = @"\d+";
string input = "123abc456";
string result = Regex.Replace(input, pattern, "X"); // 替换所有数字为 "X"
Console.WriteLine(result); // 输出 "XabcX"

分割
使用 Regex.Split 方法根据正则表达式分割字符串。

string pattern = @"\d+";
string input = "123abc456def";
string[] result = Regex.Split(input, pattern); // 根据数字分割
foreach (string s in result)
{
    Console.WriteLine(s); // 输出 "abc" 和 "def"
}

4. 正则表达式示例

邮箱验证
验证字符串是否为有效的邮箱地址。

string pattern = @"^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$";
string email = "test@example.com";
bool isValid = Regex.IsMatch(email, pattern); // true

手机号验证
验证字符串是否为有效的手机号(以 1 开头,共 11 位数字)。

string pattern = @"^1\d{10}$";
string phone = "13800138000";
bool isValid = Regex.IsMatch(phone, pattern); // true

提取 URL
从文本中提取所有 URL。

string pattern = @"https?://[^\s]+";
string input = "Visit https://example.com and http://test.com";
MatchCollection matches = Regex.Matches(input, pattern);
foreach (Match m in matches)
{
    Console.WriteLine(m.Value); // 输出 "https://example.com" 和 "http://test.com"
}

替换文本
将文本中的所有数字替换为 #。

string pattern = @"\d+";
string input = "123abc456";
string result = Regex.Replace(input, pattern, "#");
Console.WriteLine(result); // 输出 "#abc#"

5. 总结

正则表达式是一种强大的文本处理工具,掌握其基本语法和用法可以极大地提高开发效率。


网站公告

今日签到

点亮在社区的每一天
去签到