C#正则表达式的知识点有哪些
发表于:2024-12-01 作者:千家信息网编辑
千家信息网最后更新 2024年12月01日,这篇"C#正则表达式的知识点有哪些"文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇"C#
千家信息网最后更新 2024年12月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安全错误
数据库的锁怎样保障安全
池州市网络安全
数码兽卡牌数据库天女兽x
浙江企朋网络技术股份有限公
网络安全我践行手抄报大全
服务器cpu装win10系统
qq炫舞2不能连接服务器
计算机网络技术算什么工程
亚马逊内部服务器错误是什么意思
上海静安区先进网络技术
头条号网络安全加关注
网络安全技能试卷b
工程技术方面的检索数据库
世界电竞网络安全
打着北京浩祥网络技术公司
数据库电影收藏表
全球最新网络安全公司排名
缅铃声软件开发
服务器安全市场 占有率
江苏安卓软件开发教程
中兴机顶盒远程码未发现服务器
移动通讯网络技术
安阳网络技术公司
常见的服务器系统
存储过程调用其他数据库表
服务器代码安全
汽车软件开发实践 二手书
江西达客互联网科技
防城港网络技术
青岛凯瑞创智互联网工业科技
网络安全漏洞案例分析