目录
[1.查找 / 替换中的正则模板](#1.查找 / 替换中的正则模板)
一、核心概念与应用场景
介绍:正则表达式是Visual Studio中强大的文本处理工具,可用于代码查找 / 替换、文本验证和批量修改。
定义:通过模式匹配快速定位、提取或修改文本的工具。
VS中的核心场景:
1.代码重构(如批量替换变量名)
2.文本验证(如输入框手机号 / 身份证号校验)
3.日志分析(提取特定格式数据)
二、模板及使用方法
1.查找 / 替换中的正则模板
在VS的[查找和替换]窗口(Ctrl + F / Ctrl + H)中,勾选[使用正则表达式](Alt + E),即可使用下列模板:
|----------|----------------------------|-------------------|
| 模板类型 | 示例正则 | 用途 |
| 变量名替换 | (\w+)\s*=\s*null; | 匹配所有 变量名 = null; |
| 注释提取 | `//\s*(TODO | FIXME):s*(.*)` |
| HTML标签匹配 | <(\w+).*?>.*?</\1> | 匹配成对HTML标签 |
2.代码中的正则表达式(C#示例)
在WinForm或ASP.NET中,可通过System.Text.RegularExpressions.Regex类实现验证:
using System.Text.RegularExpressions;
//验证手机号
public bool IsValidPhone(string input)
{
return Regex.IsMatch(input,@"^1[3-9]\d{9}$");
}
三、VS正则的特点与注意事项
|------|----------------------------------------------|
| 特点 | 注意事项 |
| 语法扩展 | 支持\w(单词字符)、\d(数字)等元字符,但需要注意转义(如\需要写为\\) |
| 分组捕获 | 使用()捕获分组,替换时使用1 / 2引用(如$1表示第一个分组) |
| 多行模式 | 默认.不匹配换行符,需开启[多行模式]((?m))或使用\r?\n匹配换行 |
| 性能警告 | 复杂正则可能导致卡顿,建议测试后再批量替换 |
四、正则表达式常用元字符
Visual Studio中使用.NET正则表达式,常用元字符如下:
-
点号(.):匹配任何单个字符(换行符除外)。
-
脱字符(^):匹配输入字符串的开始位置。如果设置了多行模式,也匹配"\n"或"\r"之后的位置。
-
美元符($):匹配输入字符串的结束位置。如果设置了多行模式,也匹配"\n"或"\r"之前的位置。
-
星号(*):匹配前面的子表达式零次或多次。
5.加号(+):匹配前面的子表达式一次或多次。
-
问号(?):匹配前面的子表达式零次或一次。
-
花括号({n}、{n,}、{n,m}):{n}表示精确匹配n次;{n,}表示至少匹配n次;{n,m}表示匹配n到m次。
-
圆括号(()):将括号之间的表达式定义为"组",并且将匹配这个表达式的字符保存到一个临时区域,可以用\1到\9的符号来引用。
-
竖线(|):将两个匹配条件进行逻辑"或"运算。
-
反斜杠(\):将下一个字符标记为特殊字符、原义字符、向后引用或八进制转义符。例如,"\n"匹配\n,"\n"匹配换行符,"\"匹配"\"。
-
方括号([]):定义字符集合,匹配其中任意一个字符。例如,"[aeiou]"匹配任意一个元音字母。
12.反方括号([^]):匹配不在方括号中的任意字符。例如,"[^0-9]"匹配任意非数字字符。
-
连字符(-):在字符类中表示范围。例如,"[a-z]"匹配任意小写字母。
-
单词边界(\b):匹配单词边界。例如,"\bcat\b"匹配"cat"但不匹配"category"。
-
非单词边界(\B):匹配非单词边界。例如,"\Bcat\B"匹配"scattered"中的"cat"但不匹配单独的"cat"。
五、预定义字符类元字符速查表
|---------|----------------------------|---------------|------------------------------|
| 元字符 | 功能描述 | 简单示例 | 匹配结果 |
| \d | 匹配任意单个数字(等于[0-9]) | \d{3} | 123、456 |
| \D | 匹配任意带个非数字字符 | \D | a、!、 (空格) |
| \w | 匹配字母、数字、下划线 | \w+ | hello、user_01 |
| \W | 匹配非字母、非数字、非下划线 | \W | @、#、+ |
| \s | 匹配任意空白字符(空白格、制表符、换行符等) | a\sb | a b、a\tb |
| \S | 匹配任意非空白字符 | \S | x、5、* |
| \b | 匹配单词边界 | \bcat\b | 独立单词cat,不匹配category里的cat |
| \B | 匹配非单词边界 | \Bact\B | 匹配scattered里的cat |
| \t | 匹配制表符(Tab输入) | a\tb | a b(Tab分隔的a和b) |
| \n | 匹配换行符 | a\nb | a换行后接b |
| \r | 匹配回车符 | a\rb | 回车后切换位置的a和b |
六、实战例子:手机号与身份证号的验证
1.手机号验证
正则表达式:^1[3-9]\d{9}$
解释:以1开头,第二位为3-9,后接9位数字。
VS查找替换场景:
1.打开[查找和替换](Ctrl+H)
2.输入查找内容:(\b1[3-9]\d{9}\b),替换为:**$1**(高亮手机号)
C#代码验证:
string phone = "13800138000";
bool isValid = Regex.IsMatch(phone,@"^1[3-9]\d{9}$"); //返回true
2.身份证号验证(18位)
正则表达式:^\d{17}[\dXx]$
解释:17位数字 + 最后一位(数字或X/x)
VS查找替换场景:
查找内容:(\b\d{17}[\dXx]\b),替换为:ID:$1(标记身份证号)
C#代码验证:
string idCard = "110101199001011234";
bool isValid = Regex.IsMatch(idCard,@"^\d{17}[\dXx]$"); //返回true