C#正则表达式的知识点有哪些
发表于:2025-02-01 作者:千家信息网编辑
千家信息网最后更新 2025年02月01日,这篇"C#正则表达式的知识点有哪些"文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇"C#
千家信息网最后更新 2025年02月01日C#正则表达式的知识点有哪些
这篇"C#正则表达式的知识点有哪些"文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇"C#正则表达式的知识点有哪些"文章吧。
一、简介
正则表达式是一种匹配输入文本的模式,.Net 框架提供了允许这种匹配的正则表达式引擎,模式由一个或多个字符、运算符和结构组成。下面列出了用于定义正则表达式的各种类别的常用字符、运算符和结构。
字符转义
正则表达式中的反斜杠字符(\)指示其后跟的字符是特殊字符,或应按原义解释该字符。
转义字符 | 描述 | 模式 | 匹配 |
---|---|---|---|
\a | 与报警 (bell) 符 \u0007 匹配。 | \a | "Warning!" + '\u0007' 中的 "\u0007" |
\b | 在字符类中,与退格键 \u0008 匹配。 | [\b]{3,} | "\b\b\b\b" 中的 "\b\b\b\b" |
\t | 与制表符 \u0009 匹配。 | (\w+)\t | "Name\tAddr\t" 中的 "Name\t" 和 "Addr\t" |
\r | 与回车符 \u000D 匹配。(\r 与换行符 \n 不是等效的。) | \r\n(\w+) | "\r\nHello\nWorld." 中的 "\r\nHello" |
\v | 与垂直制表符 \u000B 匹配。 | [\v]{2,} | "\v\v\v" 中的 "\v\v\v" |
\f | 与换页符 \u000C 匹配。 | [\f]{2,} | "\f\f\f" 中的 "\f\f\f" |
\n | 与换行符 \u000A 匹配。 | \r\n(\w+) | "\r\nHello\nWorld." 中的 "\r\nHello" |
\e | 与转义符 \u001B 匹配。 | \e | "\x001B" 中的 "\x001B" |
\ nnn | 使用八进制表示形式指定一个字符(nnn 由二到三位数字组成)。 | \w\040\w | "a bc d" 中的 "a b" 和 "c d" |
\x nn | 使用十六进制表示形式指定字符(nn 恰好由两位数字组成)。 | \w\x20\w | "a bc d" 中的 "a b" 和 "c d" |
\c X \c x | 匹配 X 或 x 指定的 ASCII 控件字符,其中 X 或 x 是控件字符的字母。 | \cC | "\x0003" 中的 "\x0003" (Ctrl-C) |
\u nnnn | 使用十六进制表示形式匹配一个 Unicode 字符(由 nnnn 表示的四位数)。 | \w\u0020\w | "a bc d" 中的 "a b" 和 "c d" |
\ | 在后面带有不识别的转义字符时,与该字符匹配。 | \d+[\+-x\*]\d+\d+[\+-x\*\d+ | "(2+2) * 3*9" 中的 "2+2" 和 "3*9" |
字符类
字符类与一组字符中的任何一个字符匹配。
字符类 | 描述 | 模式 | 匹配 |
---|---|---|---|
[character_group] | 匹配 character_group 中的任何单个字符。 默认情况下,匹配区分大小写。 | [mn] | "mat" 中的 "m","moon" 中的 "m" 和 "n" |
[^character_group] | 非:与不在 character_group 中的任何单个字符匹配。 默认情况下,character_group 中的字符区分大小写。 | [^aei] | "avail" 中的 "v" 和 "l" |
[ first - last ] | 字符范围:与从 first 到 last 的范围中的任何单个字符匹配。 | [b-d] | [b-d]irds 可以匹配 Birds、 Cirds、 Dirds |
. | 通配符:与除 \n 之外的任何单个字符匹配。 若要匹配原意句点字符(. 或 \u002E),您必须在该字符前面加上转义符 (\.)。 | a.e | "have" 中的 "ave", "mate" 中的 "ate" |
\p{ name } | 与 name 指定的 Unicode 通用类别或命名块中的任何单个字符匹配。 | \p{Lu} | "City Lights" 中的 "C" 和 "L" |
\P{ name } | 与不在 name 指定的 Unicode 通用类别或命名块中的任何单个字符匹配。 | \P{Lu} | "City" 中的 "i"、 "t" 和 "y" |
\w | 与任何单词字符匹配。 | \w | "Room#1" 中的 "R"、 "o"、 "m" 和 "1" |
\W | 与任何非单词字符匹配。 | \W | "Room#1" 中的 "#" |
\s | 与任何空白字符匹配。 | \w\s | "ID A1.3" 中的 "D " |
\S | 与任何非空白字符匹配。 | \s\S | "int __ctr" 中的 " _" |
\d | 与任何十进制数字匹配。 | \d | "4 = IV" 中的 "4" |
\D | 匹配不是十进制数的任意字符。 | \D | "4 = IV" 中的 " "、 "="、 " "、 "I" 和 "V" |
分组构造
分组构造描述了正则表达式的子表达式,通常用于捕获输入字符串的子字符串。
分组构造 | 描述 | 模式 | 匹配 |
---|---|---|---|
( subexpression ) | 捕获匹配的子表达式并将其分配到一个从零开始的序号中。 | (\w)\1 | "deep" 中的 "ee" |
(?< name >subexpression) | 将匹配的子表达式捕获到一个命名组中。 | (?< double>\w)\k< double> | "deep" 中的 "ee" |
(?< name1 -name2 >subexpression) | 定义平衡组定义。 | (((?'Open'\()[^\(\)]*)+((?'Close-Open'\))[^\(\)]*)+)*(?(Open)(?!))$ | "3+2^((1-3)*(3-1))" 中的 "((1-3)*(3-1))" |
(?: subexpression) | 定义非捕获组。 | Write(?:Line)? | "Console.WriteLine()" 中的 "WriteLine" |
(?imnsx-imnsx:subexpression) | 应用或禁用 subexpression 中指定的选项。 | A\d{2}(?i:\w+)\b | "A12xl A12XL a12xl" 中的 "A12xl" 和 "A12XL" |
(?= subexpression) | 零宽度正预测先行断言。 | \w+(?=\.) | "He is. The dog ran. The sun is out." 中的 "is"、 "ran" 和 "out" |
(?! subexpression) | 零宽度负预测先行断言。 | \b(?!un)\w+\b | "unsure sure unity used" 中的 "sure" 和 "used" |
(?<=subexpression) | 零宽度正回顾后发断言。 | (?<=19)\d{2}\b | "1851 1999 1950 1905 2003" 中的 "99"、"50"和 "05" |
(? | 零宽度负回顾后发断言。 | (? | "Hi woman Hi man" 中的 "man" |
(?> subexpression) | 非回溯(也称为"贪婪")子表达式。 | [13579](?>A+B+) | "1ABB 3ABBC 5AB 5AC" 中的 "1ABB"、 "3ABB" 和 "5AB" |
限定符
限定符指定在输入字符串中必须存在上一个元素(可以是字符、组或字符类)的多少个实例才能出现匹配项。 限定符包括下表中列出的语言元素。
限定符 | 描述 | 模式 | 匹配 |
---|---|---|---|
* | 匹配上一个元素零次或多次。 | \d*\.\d | ".0"、 "19.9"、 "219.9" |
+ | 匹配上一个元素一次或多次。 | "be+" | "been" 中的 "bee", "bent" 中的 "be" |
? | 匹配上一个元素零次或一次。 | "rai?n" | "ran"、 "rain" |
{ n } | 匹配上一个元素恰好 n 次。 | ",\d{3}" | "1,043.6" 中的 ",043", "9,876,543,210" 中的 ",876"、 ",543" 和 ",210" |
{ n ,} | 匹配上一个元素至少 n 次。 | "\d{2,}" | "166"、 "29"、 "1930" |
{ n , m } | 匹配上一个元素至少 n 次,但不多于 m 次。 | "\d{3,5}" | "166", "17668", "193024" 中的 "19302" |
*? | 匹配上一个元素零次或多次,但次数尽可能少。 | \d*?\.\d | ".0"、 "19.9"、 "219.9" |
+? | 匹配上一个元素一次或多次,但次数尽可能少。 | "be+?" | "been" 中的 "be", "bent" 中的 "be" |
?? | 匹配上一个元素零次或一次,但次数尽可能少。 | "rai??n" | "ran"、 "rain" |
{ n }? | 匹配前导元素恰好 n 次。 | ",\d{3}?" | "1,043.6" 中的 ",043", "9,876,543,210" 中的 ",876"、 ",543" 和 ",210" |
{ n ,}? | 匹配上一个元素至少 n 次,但次数尽可能少。 | "\d{2,}?" | "166"、 "29" 和 "1930" |
{ n , m }? | 匹配上一个元素的次数介于 n 和 m 之间,但次数尽可能少。 | "\d{3,5}?" | "166", "17668", "193024" 中的 "193" 和 "024" |
二、C#常用正则表达式符号大全
验证数字:^[0-9]*$ 验证n位的数字:^\d{n}$ 验证至少n位数字:^\d{n,}$ 验证m-n位的数字:^\d{m,n}$ 验证零和非零开头的数字:^(0|[1-9][0-9]*)$ 验证有两位小数的正实数:^[0-9]+(.[0-9]{2})?$ 验证有1-3位小数的正实数:^[0-9]+(.[0-9]{1,3})?$ 验证整数和一位小数:^[0-9]+(.[1-9]{1})?$验证非零的正整数:^\+?[1-9][0-9]*$ 验证非零的负整数:^\-[1-9][0-9]*$ 验证非负整数(正整数 + 0) ^\d+$ 验证非正整数(负整数 + 0) ^((-\d+)|(0+))$ 验证长度为3的字符:^.{3}$ 验证由26个英文字母组成的字符串:^[A-Za-z]+$ 验证由26个大写英文字母组成的字符串:^[A-Z]+$ 验证由26个小写英文字母组成的字符串:^[a-z]+$ 验证由数字和26个英文字母组成的字符串:^[A-Za-z0-9]+$ 验证由数字、26个英文字母或者下划线组成的字符串:^\w+$ 验证用户密码:^[a-zA-Z]\w{5,17}$ 正确格式为:以字母开头,长度在6-18之间,只能包含字符、数字和下划线。 验证是否含有 ^%&',;=?$\" 等字符:[^%&',;=?$\x22]+ 验证汉字:^[\u4e00-\u9fa5]+$ 验证Email地址:^(\w)+(\.\w+)*@(\w)+((\.\w{2,3}){1,3})$验证InternetURL:^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$ ;^[a-zA-z]+://(w+(-w+)*)(.(w+(-w+)*))*(?S*)?$ 验证电话号码:^(\(\d{3,4}\)|\d{3,4}-)?\d{7,8}$:--正确格式为:XXXX-XXXXXXX,XXXX-XXXXXXXX,XXX-XXXXXXX,XXX-XXXXXXXX,XXXXXXX,XXXXXXXX。 验证身份证号(15位或18位数字):^\d{15}|\d{18}|\d{17}X$ 验证一年的12个月:^(0?[1-9]|1[0-2])$ 正确格式为:"01"-"09"和"1""12" 验证一个月的31天:^((0?[1-9])|((1|2)[0-9])|30|31)$ 正确格式为:01、09和1、31。 整数:^-?\d+$ 非负浮点数(正浮点数 + 0):^\d+(\.\d+)?$ 正浮点数 ^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$ 非正浮点数(负浮点数 + 0) ^((-\d+(\.\d+)?)|(0+(\.0+)?))$ 负浮点数 ^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$ 浮点数 ^(-?\d+)(\.\d+)?0-100之间的数,小数点后面最多两位^(?:(?!0\d)\d{1,2}(?:\.\d{1,2})?|100(?:\.0{1,2})?)验证html标记 /<[^>]+>/g
三、代码
是否包含a、b、c
static void Main(string[] args) { //判断是否包含a、b、c三个字符 string str = Console.ReadLine(); //把用户输入的字符存入 str string regex = @"[abc]"; //C#中 加@"[abc]" 为正则表达式基本写法 bool isMatch = Regex.IsMatch(str, regex); //比较: IsMatch(需要判断的字符,正则):返回bool值 Console.WriteLine(isMatch ? "Match [abc]" : "not Match[abc]"); //输出结果 Console.WriteLine(); }
替换正则开头或结尾
static void Main(string[] args) { StringBuilder s = new StringBuilder("www.baidu.com", 50); //声明一个字符串,容量50 //news=正则类.替换字符串(需要处理的字符串,正则,添加的字符串)-- 把符合正则情况的位置,替换为 后边字符串 //替换开头 string news = Regex.Replace(s.ToString(), "^", "网址:"); //^ :代表开头 Console.WriteLine(news); //输出 //替换结尾 news = Regex.Replace(s.ToString(), "$", "结尾"); //$:代表结尾 Console.WriteLine(news); Console.ReadLine(); }
匹配以任意除字母、下划线、数字以外的字符开头和结尾的
static void Main(string[] args) { string s = Console.ReadLine(); //s接收用户输入 string regex = @"^\W*$"; //正则:以任意除字母、下划线、数字以外的字符开头和结尾的 bool isMatch = Regex.IsMatch(s, regex); //匹配用户输入,是否满足正则条件 Console.WriteLine(isMatch ? "满足" : "不满足"); //三目运算 Console.WriteLine(); }
替换字符
static void Main(string[] args) { string s = "abcdef"; string regex = @"[^bde]"; //[^bde]代表了除 b、d、e之外的所有字符,任意一个字符 string newReplace = Regex.Replace(s, regex, "1"); //匹配 s 中,除了bde之外的字符,替换为 1 Console.WriteLine(newReplace); Console.WriteLine(); }
匹配QQ号
static void Main(string[] args) { string qq = Console.ReadLine(); //等待用户输入 string regex = @"^\d{5,11}$"; //正则:开头结尾都是数字,并且5-11位都为数字 bool isqq = Regex.IsMatch(qq, regex); //判断并返回布尔值 Console.WriteLine(isqq ? "是QQ号" : "不是QQ号"); //三目运算 Console.WriteLine(); }
验证IP地址
static void Main(string[] args) { string regex = @"^((([1]?\d\d?|2[0-4]\d|25[0-5])\.){3}([1]?\d\d?|2[0-4]\d|25[0-5]))$"; //判断IP地址是否合规 while (true) { string s = Console.ReadLine(); //等待用户输入 bool isMatch = Regex.IsMatch(s, regex); //验证ip是否合法 Console.WriteLine(isMatch ? "是IP地址" : "不是IP地址"); //三目运算 } }
以上就是关于"C#正则表达式的知识点有哪些"这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注行业资讯频道。
字符
验证
正则
数字
表达式
元素
字符串
字母
开头
整数
输入
点数
单个
模式
次数
用户
知识
内容
地址
尽可能
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
大学生网络安全主题班会登记表
cs1.6服务器端
第十八届线上网络安全知识普及赛
dw建立数据库的步骤
小米sip服务器设置
网络安全员考试报名
服务器和台式机的硬件考题
cs16怎么退出服务器
米哈游网络安全存在隐患怎么办
网络安全与管理专业考研
bbs数据库VS
云服务器如何安装crm
网络安全与信息创新工程
数据库技术是利用数据库组织
qq空间上传视频没有服务器
我的世界被服务器
3.3.5数据库汉化
数据库查询老师编号
威海到微山经过哪个服务器
翁源软件开发商
php用什么软件开发最好
如何在服务器里用模组
与服务器通讯时出现了错误
网络安全事件案例及解决办法
吃鸡雪地地图上的服务器
青少年学生网络安全意识
无线网络技术教程考试题
计算机与网络技术前途
网络技术实习生的招聘
服务器机柜深1200