返回顶部

正则表达式学习笔记

正则表达式学习笔记

在学习正则之前,一直想写一个综合登录的例子,根据用户绑定的信息,如手机号,Email,用户名来实现高效匹配登陆,根据用户的类型来选择登录的方法。 把整个正则学习一遍,发现正则表达式其实并没有你想像中的那么困难。

C#中 引入System.Text.RegularExpressions命名空间利用Regex.IsMatch(要匹配的字符串, 正则字符串) ,返回bool值来判断匹配结果。

图片描述

图片描述

实验1

字符串:him 正则:hi 匹配结果:True

实验2

字符串:

him

正则:

\bhi\b

匹配结果:False \b表示正则的特殊代码,也叫元字符。 元字符:\b 表示:单词开头和结尾处,不匹配这些单词分隔字符中的任何一个,它 只匹配一个位置。

实验3

字符串:

hi lizhijun

正则:

\bhi\b.*\blizhijun\b

匹配结果:True 元字符:. 表示:匹配除了换行符以外的任意字符 元字符: 表示:它指定*前边的内容可以连续重复使用任意次以使整个表达式得到匹配 所以,.\表示匹配任意数目除了换行意外任意字符,hi和lizhijun之间有任意长度字符,但hi和lizhijun周围需要一个空格,如:

hi 1 lizhijun True
hi 123 lizhijun True
hi 12 3lizhijun False
hi1 23 lizhijun False

实验4

字符串:

010-12111111

正则:

0\d\d-\d\d\d\d\d\d\d\d

匹配结果:True 元字符:\d 表示:匹配该位置上0-9一个数字 改进: 字符串:

010-12111111

正则:

0\d{2}-\d{8}

匹配结果:True \d后面的{2}的意思是前面\d必须连续重复匹配2次。 所以{数字} 表示花括号前元字符匹配多少位

实验5

字符串:

1204877922

正则:

^\d{5,12}$

匹配结果:True {5,12}表示从字符串开始到结束验证\d 5到12次,一般来匹配5到12长度数字的字符串

实验6

表1.常用的元字符代码 说明

.匹配除换行符以外的任意字符
\w 匹配字母或数字或下划线或汉字
\s 匹配任意的空白符
\d 匹配数字
\b 匹配单词的开始或结束
^ 匹配字符串的开始
$ 匹配字符串的结束

表2. 常用的限定符代码

/ 语法说明
* 重复零次或更多次 重复一次或更多次?重复零次或一次
{n} 重复n次
{n,} 重复n次或更多次
{n,m} 重复n到m次

字符串:

010-12111111

正则:

\(?0\d{2}[)-]?\d{8}

匹配结果:True 首先是一个转义字符(,它能出现0次或1次(?),然后是一个0,后面跟着2个数字(\d{2}),然后是)或-或空格中的一个,它出现1次或不出现(?),最后是8个数字(\d{8})。

综合实验-桂电学号正则匹配

字符串:

1212310112

正则:

^[01]\d12[12345]\d{5}$

匹配结果:True 分支条件 正则表达式里的分枝条件指的是有几种规则,如果满足其中任意一种规则都应该当成匹配,具体方法是用 把不同的规则分隔开。 如:一种是三位区号,8位本地号(如010-12345678),一种是4位区号,7位本地号(0376-2233445)。 字符串:

010-12345678

正则:

0\d{2}-\d{8} 0\d{3}-\d{7}

匹配结果:True

分组

重复单个字符是用{}来表示,如\d{3}重复匹配1-3位上是否是数字,若想重复匹配一组则要用到分组,比如,IP 分组是用()把要重复匹配的部分括起来,再{}指定匹配次数。

简单分组:

字符串:

192.168.001.001

正则:

(\d{3}\.){3}\d{3}

匹配结果:False 这里的IP必须凑3位 重新写过分组正则: 字符串:

192.168.1.1

正则:

^((25[0-5] 2[0-4]\d [01]?\d?\d)\.){3}(25[0-5] 2[0-4]\d [01]?\d?\d)$

匹配结果:False 原理:根据分组,IP里4个点分位上的值在0-255,所以分成3种情况 【1】25[0-5] 【2】24[0-9] 【3】第1位可能是0或1或没有,第二位可能是0-9或没有,第三位是0-9 所以分组成: (25[0-5] 2[0-4]\d [01]?\d?\d) 之后的.为什么单独再分一次组是为了节省内部分组重复出现匹配,当然也可以这么写

^(25[0-5]\. 2[0-4]\d\. [01]?\d?\d\.){3}(25[0-5] 2[0-4]\d [01]?\d?\d)$

到这里重写验证桂电学号正则表达式: 学号:1212310112 其中:第12位代表入学年,当前只有08,09,10,11,12,13,假定新增有14 第34位代表学校12 第5位代表系别有1-5 第6位为专业代号,各系专业分别[1系8个][2系5个][3系6个][4系6个][5系7个] 第78位为班级代号:假设有6个班 第9、10位位班级第几个同学 正则表达式:

^(0[89] 1[0-4])12(1[1-8] 2[1-5] 3[1-6] 4[1-6] 5[1-7])0[1-6]\d{2}$

表3.常用的反义代码代码/语法说明\W匹配任意不是字母,数字,下划线,汉字的字符\S匹配任意不是空白符的字符\D匹配任意非数字的字符\B匹配不是单词开头或结束的位置[^x]匹配除了x以外的任意字符[^aeiou]匹配除了aeiou这几个字母以外的任意字符

例子:\S 匹配不包含空白符的字符串。


<a[^>] >
```匹配用尖括号括起来的以a开头的字符串。

本文标题: 《正则表达式学习笔记》

文章链接: https://unyiong.com/index/index/post/id/7wfXLQkvMbc%253D.html

文章作者: 荔枝君

发布时间: 2014-04-11

最后更新: 2024-04-29

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

请荔枝君喝杯咖啡☕️:-)
打赏