【.NET】正则表达式笔记
很早就听说正则表达式的强大,今天终于一睹它的真容,在这里记下学习时候的笔记,以便以后查看
1、正则表达式
用于描述字符串规则的的特殊的字符(正则表达式本身是字符串,用来描述字符串的相关规则,用于与其他字符串进行匹配)
例如:
正则表达式:\bHttp\b 表示单词 Http,两边的\b表示单词的开始于结束
可以与"Here is a Http tag"匹配,但是不能与'", "HttpRequest", "XMLHttpRequest"等字符串匹配,
2、元字符(meta character)
用于描述最基本的信息,常见的有以下元字符
\b 单词的开始于结束
\w 字母(大小写),数字,下划线
\s 任意空字符(空格,制表符,回车)
\d 匹配数字0-9
. 小数点,匹配非换行字符
^ 字符串的开始(注意:\b是表示单词)
$ 字符串的结束
其中:\B,\W,\S,\D的含义与小写的相反
例如:\D表示非数字字符
3、转义字符
小数点: \.
星号: \*
下划线: \\
括号: \( \)
3、限定字符
* 重复0次或多次
+ 重复1次或多次
? 重复0次或1次
{n} 重复n次
{n,} 重复n次以上
{n,m} 重复n次到m次,包括n,m次
当要匹配多个字符的时候,可以使用限定字符
例如:^\d{5}\w*$ 表示以5个数字开头的后面跟任意长度的字符(字母或数字或下划线)
4、字符类
匹配单个字符 [abc] 匹配所有a,b,c字符
[^acd] 匹配所有的部位a,c,d的字符
[,.?!;'"] 匹配半角标点
[a-zA-Z0-9_] 相当于\w
5、分枝条件
当有多个匹配条件的时候,可以使用 '|' 符号来连接几个条件,会优先匹配第一个
例如:\d{5}-\d{4}|\d{4}-\d{5}
IP地址: ((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)
6、分组
后向引用:用于搜索前面匹配的结果
例如:在后面的匹配需要用到前面的匹配结果,
\b(?<name>\w+)\b\s+\k<name>\b 匹配两个连续相同的单词
(exp) 匹配exp表达式,并将匹配文本放到自动命名组里
(?<name>exp) 可对匹配的文本手动命名,并通过\k<name>引用,也可以吧尖括号换成单引号(?'name'exp)
(?:exp) 不获取文本,不分配组号
7、断言
1)正预测先行断言 (?=exp) 先匹配断言里面的表达式,匹配出之前的位置,再匹配外面的表达式,匹配结果不包含断言内容
例如:\d[0-9]*(?=9\b) 先判断单词是否以9结束,在判断是否为全数字,匹配结果不包含9
78159 匹配结果为 7815 断言位置在9之前
2)正回顾后发断言 (?<=exp) 匹配出之后的位置
例如:(?<=\bre)\w* 匹配以 re 开头的单词,不包括re
I'm reading 匹配结果为 eading 断言位置在re之后
3)负向零宽先行断言 (?!exp)
与正预测先行断言相似,只是匹配的条件为相反
例如: \d{3}(?!\d) 匹配三位数字,而且这三位数字的后面不能是数字;
\b((?!abc)\w)+\b 匹配不包含连续字符串abc的单词。
4)负向零宽后发断言 (?<!exp)
与郑回顾后发断言相似,匹配条件相反
例如: (?<![a-z])\d{7} 匹配前面不是小写字母的七位数字。
8、注释
(?#comment) 例如 \d{3}(?!\d)(?#这里是注释)
9、贪婪匹配与懒惰匹配
在默认情况下,所有的匹配都会采取贪婪匹配,即匹配竟可能多的项
例如: a.*b 匹配 abaaababaa
默认情况下回匹配出 abaaabab, 而不是 ab,aaab,ab
在限定符后面加上?则可以竟可能少的匹配
a.*? 匹配 abaaababaa 结果为 ab,aaab,ab
10、在.NET中使用
Regex regex = new Regex(@"^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$", RegexOptions.Multiline | RegexOptions.IgnorePatternWhitespace);bool b = regex.IsMatch("44917929@qq.com");
在new Regex的时候,可以设置一些参数 http://msdn.microsoft.com/zh-cn/library/system.text.regularexpressions.regexoptions.aspx
Compiled 指定将正则表达式编译为程序集。 这会产生更快的执行速度,但会增加启动时间。
ExplicitCapture 仅捕获显式命名的组
IgnoreCase 指定不区分大小写的匹配。
None 匹配任何字符除了\n。^和$不起作用。
Singleline 匹配任何字符。^和$匹配整个字符串
Multiline 匹配任何字符除了\n。^和$匹配每行的开头和结尾。
IgnorePatternWhitespace 忽略表达式中的非转义空白,并启用#标记注释
11、练习
1、非负整数 ^\d+$
2、正整数 ^[1-9]*[1-9][0-9]*$
3、非正整数 ^(-\d+10)$
4、负整数 ^-[1-9]*[1-9][0-9]*$
5、整数 ^-?\d+$
5、非负浮点数 ^\d+(\.\d+)?$
6、正浮点数
7、长度为8-10的用户名(以字母或下划线开头) ^[A-Za-z_]\w{7,9}$
8、电子邮件 ^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$
9、一个没有属性的html标签的内容(例如<div>内容</div>) (?<=<(\w+)>).*(?=<\/\1>)
参考文章:
http://www.cnblogs.com/deerchao/archive/2006/08/24/zhengzhe30fengzhongjiaocheng.html#lookaround
【.NET】正则表达式笔记相关推荐
- c# 正则表达式笔记
c# 正则表达式笔记 估计要写几天 看得一个不错的正则教程包括字符串教程 C#字符串和正则表达式参考手册.pdf 正则所需要的命名空间是 using System.Text.RegularExpres ...
- PHP正则表达式笔记与实例详解
链接:https://www.jb51.net/article/160947.htm 笔记: 一.正则表达式的介绍: 二. 语法: 三. 正则表达式的组成部分: 四. 正则表达式的函数: 实例: 1. ...
- 尚硅谷学Javaweb,关于正则表达式笔记
笔记即是代码: <!DOCTYPE html> <html lang="en"> <head><meta charset="UT ...
- 精通正则表达式笔记二---正则表达式基础概念?,+,*,{ },\,“ “,时间,小结
2 可选项元素 2.1 ? 现在来看color和colour的匹配.它们的区别在于,后面的单词比前面的多一个u,我们可以用colou?r来解决这个问题.元字符?(也就是问号)代表可选项.把它加在一个字 ...
- JavaScript正则表达式笔记
正则表达式是一个描述字符模式的对象. JavaScript的RegExp对象和String对象定义了使用正则表达式来执行强大的模式匹配和文本检索与替换函数的方法. ''**************** ...
- 正则表达式笔记(谷歌分析自定义报告)
2019独角兽企业重金招聘Python工程师标准>>> 练习: /activity/sport.html (如果只是包含单个链接,前面一定要有"/"开头,不然没有 ...
- 正则表达式笔记(一)
正则表达式 一.元字符 1.1 元字符表 1.2 匹配位置的元字符 1.2.1 `^` 1.2.2 `$` 1.2.3 `\b` 1.3 匹配字符的元字符 二.文字匹配 2.1.字符类 2.2.限定符 ...
- java正则表达式笔记
原文链接:http://blog.csdn.net/neweastsun/article/details/46926853 正则表达式(regular expressions)是一种描述字符串集的方法 ...
- Python的正则表达式笔记
1. "先抓大再抓小": 遇到一个正则表达式无法一次性筛选出所需内容时, 可以先在一个范围内筛选第一次, 再在小范围中筛选第二次. 2. pattern = re.compile( ...
最新文章
- Redis+Nginx+设计模式+Spring全家桶+Dubbo阿里P8技术精选文档
- java多线程提高性能写法
- spring mvc DispatcherServlet详解之interceptor和filter的区别
- Taro+react开发(17)--赋值错误回显异常
- input 标签在做动画时的bug
- Vue组件化之VueComponent介绍
- [Python] pip 清除缓存
- Process when we start our testing work
- android 蓝牙编程重点---如何发送和接收16进制数据
- Java并发编程:Lock(下)
- 工具说明书 - 使用带连字功能(ligature)的编程字体
- Java中的数据类型
- python转换excel 列号 为数字 数字转为列号
- White Sheet(面积法)
- netbeans php 发布,Apache NetBeans 12.0 LTS 发布
- 木叶村第一次全村人民代表大会
- LAN9252/3 EtherCAT module
- 线上引流方法有哪些?怎么做线上引流推广?
- PCM音频格式的深入理解
- The Shawshank Redemption-14