正则表达式的总结
经常用到正则表达式,以前很懒总是让同事帮我写,最近有时间稍微复习了下正则表达式的基本语法,发现网络上的这类知识是琳琅满目,通过去糟粕取精华后总结了这篇文章。
为了便于学习,自己写了一个测试正则的小工具
关键代码:
/// <summary>
/// 验证
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnVerify_Click(object sender, EventArgs e)
{
string getRegex = this.txtRegex.Text.Trim();
string getStr = this.txtString.Text.Trim();
//开始匹配
bool result = System.Text.RegularExpressions.Regex.IsMatch(getStr, getRegex);
if(result)
{
this.lblMessage.Text="恭喜您,匹配成功!";
}
else
{
this.lblMessage.Text="对不起,匹配失败!";
}
}
命名空间: System.Text.RegularExpressions下的Regex类 该类不是静态类却有自己的静态方法和非静态方法虽然方法名字都是IsMatch,但不是同一个方法,好了言归正传。
元字符
[] 表示字符组,仅仅匹配字符组中的一个字符(只是单个)
例如a[123]b 匹配 a1b、a2b、a3b 不匹配a12b
[0-9] 表示0到9之间任意一个数字
[a-z] 表示a到z之间任意一个字符
. 表示除了n外的一切单字符
[a-zA-Z] 表示a到z 或者 A到Z之间的任意一个字符
[a-] 表示只能匹配 单字符a 和 单字符- -前面加一个是转义的意思 -是连字符需要转义
[a.] 表示匹配a和单字符. .原来表示除了n外的一切单字符 这里如何需要这样表示则需要 [a.]
() 类似数学的作用改变逻辑顺序
| 表示或的意思
限定符
{n} 表示{}前面的单字符必须出现n次才匹配成功,如果遇到()则()里面的必须出现n次
{n,} 表示{}前面的单字符必须至少出现n次,如果遇到()则()里面的必须至少出现n次
{n,m} 表示{}前面的单字符出现的次数必须在n到m之间
例如 abcd{2,4}可以匹配 abcdd abcdd
(ab){2,4}可以匹配 abab abababab
* 表示表达式出现0次或n次 和{0,}相同
+ 表示表达式至少出现一次和{1,}相同
? 表示表达式出现0次或者1次和{0,1}相同
注意: * + ? 都是针对表达式的 例如 abc+ 匹配abc 不匹配bc
^和$
^ 表示字符串的开始
^abc 表示需要匹配的正则表达式字符串必须以abc开始
[^0-9] 这里的^代表非的意思,匹配0到9意外的任意单个字符
$ 表示字符串的结束(要匹配的正则表达式的结束)
abc$ 表示字符串必须以abc结尾
简写
d 相当于[0-9] 例如:adb 相当于a[0-9]b (特别注意一点d 除了可以匹配[0-9]这些正常的数字以外,它还可以匹配0123456789这些全角的数组。所以我们如果仅仅需要半角的数字只能使用[0-9]这样的书写方法)
D 表示[^0-9]
s 表示所有空白符
S 是s的反面,意思是所有s不能匹配的S都可以匹配
w 表示的[a-zA-Z0-9_] 就是所有大小写字母+数字+下划线 的单个字符
W 表示w的反面 由于.net默认采用unicode方式来匹配,所以w也可以匹配汉字
正则表达式的转义符
例如d表示[0-9] 那么如何匹配d本身呢 可以这样写:\d 类似的还有* + . - {2,3}
简便的写法类似于c#中的语法@符号 ,例如:string s=Regex.Escape(@"d{1,3}");
一个正则表达式当出现双引号的时候我们怎么做书写
- TensorFlow 入门
- Python 爬虫 1 快速入门
- Exim Off-by-one(CVE-2018-6789)漏洞复现分析
- 一文学会用 Tensorflow 搭建神经网络
- 数据降维处理:PCA之特征值分解法例子解析
- 理解Eureka的自我保护模式
- 如何使用Feign构造多参数的请求
- 最简日志打印规范
- 碎片化 | 第四阶段-47-值栈细节问题-视频
- word2vec 模型思想和代码实现
- 碎片化 | 第四阶段-48-hibernate概述和配置-视频
- 【LEETCODE】模拟面试-357- Count Numbers with Unique Digits
- Python 爬虫 2 爬取多页网页
- 碎片化 | 第四阶段-49-hibernate之HQL查询操作-视频
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- java编程思想第四版第三章要点总结
- 05 . Prometheus监控Nginx
- java编程思想第四版第五章总结
- 01 . 容器编排简介及Kubernetes核心概念
- java编程思想第四版第五章习题
- 02 . Kubeadm部署Kubernetes及简单应用
- java编程思想第四版第六章习题
- Docker部署Python项目
- 03 . 二进制部署kubernetes1.18.4
- 01 . 美团全链路监控CAT简介及部署
- 02 . Ansible高级用法(运维开发篇)
- java编程思想第四版第七章总结
- OpenVPN原理及部署使用
- 04 . Jenkins部署Java项目
- java编程思想第四版第七章习题