C#正则表达式语法教程
C#语法之正则
|
本文提供全流程,中文翻译。 Chinar 坚持将简单的生活方式,带给世人! (拥有更好的阅读体验 —— 高分辨率用户请根据需求调整网页缩放比例) |
|
Chinar —— 心分享、心创新! 助力快速理解: 正则表达式的用法、规范 为新手节省宝贵的时间,避免采坑! |
Chinar 教程效果:
正则:^((([1]?\d\d?|2[0-4]\d|25[0-5])\.){3}([1]?\d\d?|2[0-4]\d|25[0-5]))$
全文高清图片,点击即可放大观看 (很多人竟然不知道)
1
Regular Expression —— 正则表达式
正则表达式的用法,在诸多语言中,几乎都是一样
这里就以 C# 为例,用 VS 控制台输出 做演示
| 概念: |
|---|
| 对于正则表达式官方的简介,我这里都不多说了,一句话概括就是: |
| 用一些正则字符按照语法要求进行自定义的组合,用来判断需要处理的字符串是否合规 |
| 也就是用来记录字符规则的代码 |
| (其实你就先理解为:定义一个判断条件 就是 定义正则表达式) |
| 用途: |
| 处理字符串 / 判断字符串是否合规 |
Chinar 将用大量的例子去,帮助大家理解正则是个什么玩意儿….
2
Regex Tools —— 正则表达式工具
Chinar 收集并挑选了网上大神 / 公司做的较为出色的正则工具,一并推荐给大家!
1. 正则图示工具—— Regulex
2. 正则图示工具—— Regexper
3. 菜鸟正则测试工具—— 菜鸟正则在线测试
4. 站长正则测试工具—— 站长正则测试工具
3
Contain abc —— 是否包含 abc字符
当我们需要判断用户输入字符中,是否含有 abc 三个字符时
static void Main()
{
while (true)
{
string str = Console.ReadLine(); //把用户输入的字符存入 str
string regex = @"[abc]"; //C#中 加@"[abc]" 为正则表达式基本写法
bool isMatch = Regex.IsMatch(str, regex); //比较:—— IsMatch(需要判断的字符,正则):返回bool值
Console.WriteLine(isMatch ? "满足条件" : "不满足"); //输出结果
Console.WriteLine(); //空行
}
}
输入 / 输出结果:
1
不满足
a
满足条件
Chinar
满足条件
新年快乐!bcadlf
满足条件
1231534564dc
满足条件
4
MetaCharacter —— 元字符
| 正则字符 | 作用 |
|---|---|
| . | 匹配除换行符( \n )以外的任意字符 |
| \w | 匹配字母或数字或下划线或汉字 |
| \s | 匹配任意的空白符 |
| \d | 匹配数字 |
| \b | 匹配单词的开始或结束 |
| ^ | 匹配字符串的开头 |
| $ | 匹配字符串的结尾 |
在字符串开头 / 结尾处添加字符
static void Main()
{
StringBuilder s = new StringBuilder("www.unity.kim", 50); //声明一个字符串,容量50
//news=正则类.替换字符串(需要处理的字符串,正则,添加的字符串)—— 把符合正则情况的位置,替换为 后边字符串
string news = Regex.Replace(s.ToString(), "^", "网址:"); //^ :代表开头
Console.WriteLine(news); //输出
news = Regex.Replace(s.ToString(), "$", "结尾"); //$:代表结尾
Console.WriteLine(news);
Console.WriteLine("..................................定位元字符.....................................");
Console.ReadLine();
}
输出结果:
网址:www.unity.kim
www.unity.kim结尾
..................................定位元字符.....................................
5
ESC —— 反义字符
| 正则字符 | 作用 |
|---|---|
| \W | 匹配任意不是字母,数字,下划线,汉字的字符 —— \w 以外的字符 |
| \S | 匹配任意不是空白符的字符 —— \s 以外的字符 |
| \D | 匹配任意非数字的字符 —— \d 以外的字符 |
| \B | 匹配不是单词开头或结束的位置 —— \b 以外的字符 |
| [^a] | 匹配除了 a 以外的任意字符 |
| [^Chinar] | 匹配除了 Chinar 这几个字符以外的任意字符 |
替换 / 判定特定字符,是否满足条件,替换
static void Main()
{
while (true)
{
string s = Console.ReadLine(); //s接收用户输入
string regex = @"^\W*$"; //正则:以任意除字母、下划线、数字以外的字符 —— 开头到结尾的
bool isMatch = Regex.IsMatch(s, regex); //匹配用户输入,是否满足正则条件
Console.WriteLine(isMatch ? "满足" : "不满足"); //三目运算
Console.WriteLine(); //空行
s = "abcdef";
regex = @"[^bde]"; //[^bde]代表了除 bde之外的所有字符,任意一个字符
string newReplace = Regex.Replace(s, regex, "1"); //匹配 s 中,除了bde之外的字符,替换为 1
Console.WriteLine(newReplace);
Console.WriteLine();
}
}
输出结果:
!
满足
1b1de1
!$@#$123
不满足
1b1de1
)(*&^%$#@!
满足
1b1de1
6
Repetition Descriptor —— 重复描述字符
| 正则字符 | 作用 |
|---|---|
| * | 重复 0 次或 多次 |
| + | 重复 1 次或 多次 |
| ? | 重复 0 次或 1 次 |
| {a} | 重复 a 次 |
| {a,} | 重复 a 次或 多次 |
| {a,b} | 重复 a 到 b 次 |
判定QQ号是否合法 —— (这里提供2种)
图 一
图 二
/// <summary>
/// 判断QQ号是否合法
/// </summary>
static void Main()
{
while (true)
{
string qq = Console.ReadLine(); //等待用户输入
string regex = @"^\d{5,11}$"; //正则:开头结尾都是数字,并且5-11位都为数字
bool isqq = Regex.IsMatch(qq, regex); //判断并返回布尔值
Console.WriteLine(isqq ? "是QQ号" : "不是QQ号"); //三目运算
Console.WriteLine();
}
}
输出结果:
10000
是QQ号
122694885
是QQ号
1234
不是QQ号
123456789012
不是QQ号
abc123456
不是QQ号
123456!
不是QQ号
7
Alternative —— 择一匹配符
| —— 或,把可能性进行或相关
从给定字符串中拆分出名字
/// <summary>
/// 择一匹配符
/// </summary>
static void Main()
{
StringBuilder s = new StringBuilder("网址:www.unity.kim/1/ab3.html", 50); //定义一个字符串
string regex = @"\d|[a-z]|[/]|[.]"; //正则:包含数字 | a-z的字母 | / | . 的字符。
MatchCollection matchCollection = Regex.Matches(s.ToString(), regex); //返回的是一个 MatchCollection 集合
foreach (Match match in matchCollection) //遍历集合
{
Console.Write(match.ToString()); //输出到一行中
}
Console.WriteLine();
Console.WriteLine("...............择一匹配符一....................................");
s.Remove(0, s.Length);
s.Append("a,钱二。孙三:李四;孬蛋》");
regex = @"[,。:;》]"; //正则:满足任意一个,。:;》这些字符的,来分割字符串
string[] strings = Regex.Split(s.ToString(), regex);
foreach (var s1 in strings)
{
Console.WriteLine(s1);
}
Console.WriteLine("...............择一匹配符二....................................");
regex = @"[,]|[。]|[:]|[;]|[》]"; // | —— 或的意思
strings = Regex.Split(s.ToString(), regex);
foreach (var s1 in strings)
{
Console.WriteLine(s1);
}
Console.WriteLine("...............择一匹配符三....................................");
Console.ReadLine();
}
输出结果:
www.unity.kim/1/ab3.html
...............择一匹配符一....................................
a
钱二
孙三
李四
孬蛋
...............择一匹配符二....................................
a
钱二
孙三
李四
孬蛋
...............择一匹配符三....................................
8
Grouping —— 分组
() —— 括号决定优先级
先匹配 c\w 然后重复 2 次
/// <summary>
/// 分组 —— 测试连续先后顺序
/// </summary>
static void Main()
{
while (true)
{
string s = Console.ReadLine(); //等待用户输入
string regex = @"(c\w{2}){2}"; //其实就等于 C\w连在一起满足2次 满足前者2次
string newReplace = Regex.Replace(s, regex, "小狗"); //替换满足 正则的 字符为:小狗
Console.WriteLine("结果为:" + newReplace);
Console.WriteLine(".....................正则分组一....................................");
}
}
输出结果:
c1acbdadsfasdfsadfjl你好12345
结果为:小狗adsfasdfsadfjl你好12345
.....................正则分组一....................................
c11cd!alskdj年
结果为:c11cd!alskdj年
.....................正则分组一....................................
cqwcer,..34你好cagc33,crrcpp,c44,c66c__
结果为:小狗,..34你好小狗,小狗,c44,小狗
.....................正则分组一....................................
9
Verification IPV4 —— 验证 IP 合法
综合训练
验证IPV4地址的合法性
/// <summary>
/// 分组 —— 测试IP合法性
/// </summary>
static void Main()
{
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地址"); //三目运算
Console.WriteLine(".....................正则分组二....................................");
}
}
输出结果:
1.1.1.1
是IP地址
.....................正则分组二....................................
255.255.255.255
是IP地址
.....................正则分组二....................................
256.255.255.255
不是IP地址
.....................正则分组二....................................
0.0.0.-1
不是IP地址
.....................正则分组二....................................
a.b.c.d
不是IP地址
.....................正则分组二....................................
10
Verification IPV4 —— 菜鸟深造
Chinar 毕竟不是专业级教师,所以想要更深的了解正则,请去菜鸟深造!
Chinar 已为您提供了传送门 ↓ ↓
菜鸟 - 正则表达式30分钟入门教程(其实很长….一个小时也很难吃透)
其实一般都是要用到的时候才去搜索
收藏好,目录2中的4个工具,对于你正则的学习会很有用处!
感谢您的支持!
支持
May Be —— 搞开发,总有一天要做的事!
|
拥有自己的服务器,无需再找攻略! Chinar 提供一站式教程,闭眼式创建! 为新手节省宝贵时间,避免采坑! |
先点击领取 —— 阿里全产品优惠券 (享受最低优惠)
1 —— 云服务器超全购买流程 (新手必备!)
2 —— 阿里ECS云服务器自定义配置 - 购买教程(新手必备!)
3—— Windows 服务器配置、运行、建站一条龙 !
4 —— Linux 服务器配置、运行、建站一条龙 !
" role="presentation">
Chinar
END
本博客为非营利性个人原创,除部分有明确署名的作品外,所刊登的所有作品的著作权均为本人所拥有,本人保留所有法定权利。违者必究
对于需要复制、转载、链接和传播博客文章或内容的,请及时和本博主进行联系,留言,Email: ichinar@icloud.com
对于经本博主明确授权和许可使用文章及内容的,使用时请注明文章或内容出处并注明网址
C#正则表达式语法教程的更多相关文章
- 深入浅出的javascript的正则表达式学习教程
深入浅出的javascript的正则表达式学习教程 阅读目录 了解正则表达式的方法 了解正则中的普通字符 了解正则中的方括号[]的含义 理解javascript中的元字符 RegExp特殊字符中的需要 ...
- java正则表达式语法详解及其使用代码实例
原文地址 译者序(下载代码) 正则表达式善于处理文本,对匹配.搜索和替换等操作都有意想不到的作用.正因如此,正则表达式现在是作为程序员七种基本技能之一*,因此学习和使用它在工作中都能达到很高的效率. ...
- 转--htaccess语法教程 apache服务器伪静态规则教程
转自:http://blog.csdn.net/qingli518/article/details/9118361 htaccess语法教程apache服务器伪静态规则教程 注:如果你是为了找Disc ...
- java 正则表达式语法
java 正则表达式语法 标签: 正则表达式javawindowsvbscriptscripting电话 2012-05-20 10:11 6705人阅读 评论(1) 收藏 举报 分类: javaS ...
- JS正则表达式完整教程
JS正则表达式完整教程(略长) 引言 亲爱的读者朋友,如果你点开了这篇文章,说明你对正则很感兴趣. 想必你也了解正则的重要性,在我看来正则表达式是衡量程序员水平的一个侧面标准. 关于正则表达式的教程, ...
- 【转】详解Java正则表达式语法
(转自: http://www.jb51.net/article/76354.htm) 这篇文章主要介绍了Java正则表达式语法,包括常用正则表达式.匹配验证-验证Email是否正确以及字符串中查询字 ...
- C#正则表达式语法规则详解
正则表达式通常包含字母文本(Literaltext)和元字符(metacharacter) 字母文本指的是普通文本如"abcde"可匹配字符串中任何包含"abcde&qu ...
- JAVA正则表达式语法大全
[正则表达式]文本框输入内容控制 整数或者小数:^[0-9]+\.{0,1}[0-9]{0,2}$ 只能输入数字:"^[0-9]*$". 只能输入n位的数字:"^\d{n ...
- PHP 正则表达式语法
则表达式简介 在某些应用中,往往有时候需要根据一定的规则来匹配(查找)确认一些字符串,如要求用户输入的 QQ 号码为数字且至少 5 位.用于描述这些规则的工具就是正则表达式. 最简单的匹配 最简单的匹 ...
随机推荐
- redis 缓存策略
redis 缓存策略配置项:maxmemory <bytes>maxmemory-policy noeviction 触发时机:每次执行命令(processCommand)的时候会检测 w ...
- 谈一谈JUnit神奇的报错 java.lang.Exception:No tests found matching
最近在学习Spring+SpringMVC+MyBatis,一个人的挖掘过程确实有点艰难,尤其是有一些神奇的报错让你会很蛋疼.特别是接触一些框架还是最新版本的时候,会因为版本问题出现很多错误,欢迎大家 ...
- vue 中使用 Toast弹框
import { ToastPlugin,ConfirmPlugin,AlertPlugin} from 'vux' Vue.use(ToastPlugin) Vue.use(ConfirmPlugi ...
- suffix word ality ally an ancy ance an aneity out ~1
1● ality 状态,性质 2● ally al+ly ~地 3● an ~地方 ,~人 1★ ance=ancy 性质 ,状态 2★ant ~人,~剂,~的 3★ an ...
- react之传递数据的几种方式props传值、路由传值、状态提升、redux、context
react之传递数据的几种方式 1.父子传值 父传值:<子的标签 value={'aaa'} index={'bbb'}></子的标签> 子接值:<li key={thi ...
- json模块&xml
json模块将数据修改成字符串,方便其他语言进行识别. 只认双引号,不认单引号.使用json.dumps的操作步骤 先将单引号修改成单引号 将变量使用单引号引起来 将数据类型编程json字符串 jso ...
- 最完整的mac安装caffe
Dependencies : [TIP : Though the official documentation suggests installing Anaconda, it would be be ...
- urllib python3 请求、登录、下载网页
urllib.request 发送request和获取request的结果 urllib.error包含了urllib.request产生的异常 urllib.parse用来解析和处理Url urll ...
- :迭代器模式1:Iterator
//今天一口气把这一章前半部分的iterator例子的所有代码写完,涉及到了不少指针的内容,竟然一次性编译通过.... //Iterator与Menu之间应该不是has a的关系,先这样着吧. #if ...
- xilinx 高速收发器Serdes深入研究-Comma码(转)
一.为什么要用Serdes 传统的源同步传输,时钟和数据分离.在速率比较低时(<1000M),没有问题. 在速率越来越高时,这样会有问题 由于传输线的时延不一致和抖动存在,接收端不能正确的采样数 ...