C# 正则表达式(一)

首先来复习一下正则表达式的基础知识,本篇文章分为2个部分,第一个部分复习正则表达式中的元字符和简写表达式,第二部分复习正则表达式的匹配和提取。

1.正则表达式中的元字符和简写表达式

".":它匹配除\n之外的任何单个字符.

"{n,}",表示前面的字符至少出现n次,最多不限。

"{n,m}"表示前面的字符至少出现n次,最多出现m次。

"+":加号匹配紧挨着它前面的字符出现1次或多次.用上面的表达式可以这么写:{1,}

"*":星号匹配紧挨着它前面的字符出现0次或多次.用上面的表达式可以这么写:{0,}

"?":问号匹配紧挨着它前面的字符出现0次或1次.用上面的表达式可以这么写:{0,1}

[]:匹配括号中的任何一个字符(范围,字符集合).如:匹配英文26个字母的大小写,可在括号中这么写:[a-zA-Z];匹配所有阿拉伯数字,可在括号中这么写:[0-9]

中括号中的"."表示一个普通点,如果要包含其他含义,则需要转义(\.).

"|",它表示将两个匹配条件进行逻辑“或”运算,运算级别最低。

"()",它用来提升表达式的优先级,另外一个作用是提取分组。

完全限定符:

"^",它表示一个字符串的开始,另外一个作用是取非([^0-9])。

"$",它表示一个字符串的结束。

简写表达式:

"\d",它匹配所有阿拉伯数字,即[0-9],因为.net采用Unicode编码,它也匹配全角数字,如果不希望匹配全角数字,请指定RegexOptions.ECMAScript(采用ASCII码匹配)或[0-9]。

"\D",它是"\d"的反面,即匹配除\d之外的其他字符。

"\s",它匹配所有的空白符(包含空格、回车、制表符)。

"\S",它是"\s"的反面,即匹配除\s之外的其他字符。

"\w",匹配字母或数字或下划线或汉字,即能组成单词的字符,除%&#@!$等字符。[a-zA-Z0-9_汉字] (unicode字符)

"\W",它是"\w"的反面,即匹配除\w之外的其他字符。

"\b",它表示单词的边界。

忽略所有的元字符,类似于C#中的@符号:string s=Regex.Escape(@"\d{5,7}");

2.正则表达式的匹配

判断是否匹配:Regex.IsMatch(“字符串”,”正则表达式”);此类问题要想的是与之匹配的正则表达式如何写(找规律),正则表达式写好了,问题就解决了。

下面给出几个案例:

 1 #region 验证身份证号是否正确(规律,第一位不能是0;如果是15位,则全数字,如果是18位,则最后一位即可能是数字也可能是英文字母X)
 2             string strPattr = @"^[1-9][0-9]{14}([0-9]{2}[0-9X])?$";
 3             while (true)
 4             {
 5                 Console.WriteLine("请输入你的身份证号:");
 6                 string sCode = Console.ReadLine();
 7                 if (Regex.IsMatch(sCode, strPattr))
 8                 {
 9                     Console.WriteLine("true");
10                 }
11                 else
12                 {
13                     Console.WriteLine("false");
14                 }
15             }
16             #endregion

 1 #region 验证邮政编码是否正确
 2             string strPattr = @"^[1-9][0-9]{5}$";
 3             while (true)
 4             {
 5                 Console.WriteLine("请输入你所在地邮政编码:");
 6                 string sCode = Console.ReadLine();
 7                 if (Regex.IsMatch(sCode, strPattr))
 8                 {
 9                     Console.WriteLine("true");
10                 }
11                 else
12                 {
13                     Console.WriteLine("false");
14                 }
15             }
16             #endregion

 1 #region 验证所有电话号码是否正确
 2             //1.手机号:以130-139、150-159、186-189这3个号段,后面8位数字。[1][3|5][0-9]{9}|[1][8][6-9][0-9]{8}
 3             //2.座机号:区号以0开头,后面跟2-3位数字,号码为7-8位数字。[0][1-9][0-9]{1,2}(\-)?[0-9]{7,8}
 4             //3.400、800电话:以4或8开头,紧跟2个0,后面为7位数字。[4|8][0]{2}(\-)?[0-9]{7}
 5             //4.5位数字的客服电话 [1-9][0-9]{4}
 6
 7             string strPattr = @"^([1][3|5][0-9]{9}|[1][8][6-9][0-9]{8}|[0][1-9][0-9]{1,2}(\-)?[0-9]{7,8}|[4|8][0]{2}(\-)?[0-9]{7}|[1-9][0-9]{4})$";
 8             while (true)
 9             {
10                 Console.WriteLine("请输入您的联系方式:");
11                 string sCode = Console.ReadLine();
12                 if (Regex.IsMatch(sCode, strPattr))
13                 {
14                     Console.WriteLine("true");
15                 }
16                 else
17                 {
18                     Console.WriteLine("false");
19                 }
20             }
21             #endregion

 1 #region 验证邮箱格式是否合法
 2             string strPattr = @"^[-0-9a-zA-Z_][email protected][a-zA-Z0-9]+(\.[a-zA-Z]+){1,2}$";
 3             while (true)
 4             {
 5                 Console.WriteLine("请输入您的电子邮箱地址:");
 6                 string sEmail = Console.ReadLine();
 7                 if (Regex.IsMatch(sEmail, strPattr))
 8                 {
 9                     Console.WriteLine("true");
10                 }
11                 else
12                 {
13                     Console.WriteLine("false");
14                 }
15             }
16             #endregion

 1 #region 匹配IP地址,4段用.分割的最多三位数字。 192.168.54.77是正确的,而333.333.333.333是错误的。
 2             string sIp = "192.168.54.77";
 3             string strPattr = @"^([1][0-9]{2}|[2][0-5]{2}|[3|4|5|6|7|8|9][0-9])(\.([1][0-9]{2}|[2][0-5]{2}|[3|4|5|6|7|8|9][0-9])){3}$";
 4
 5             if (Regex.IsMatch(sIp, strPattr))
 6             {
 7                 Console.WriteLine("true");
 8             }
 9             else
10             {
11                 Console.WriteLine("false");
12             }
13             Console.ReadKey();
14             #endregion

 1 #region 判断是否是合法的日期格式“2008-08-08”。四位数字-两位数字-两位数字
 2             string strPatt = @"^([1][0-9]{3}|[2][0][0-9]{2})(\-)?([0][1-9]|[1][0-2])(\-)?([0][1-9]|[1|2][0-9]|[3][0-1])$";
 3             string sYear = "20140807";
 4
 5             if (Regex.IsMatch(sYear, strPatt))
 6             {
 7                 Console.WriteLine("true");
 8             }
 9             else
10             {
11                 Console.WriteLine("false");
12             }
13             Console.ReadKey();
14             #endregion

 1 #region 判断是否是合法的url地址,http://www.test.com/a.htm?id=3&name=aaa、ftp://127.0.0.1/1.txt
 2             string strPatt = @"^.+://.+$";
 3             while (true)
 4             {
 5                 Console.WriteLine("请输入url地址:");
 6                 string sUrl = Console.ReadLine();
 7                 if (Regex.IsMatch(sUrl,strPatt))
 8                 {
 9                     Console.WriteLine("true");
10                 }
11                 else
12                 {
13                     Console.WriteLine("false");
14                 }
15             }
16             #endregion

 3.字符串提取

字符串提取:Regex.Match(“字符串”,“要提取的字符串的正则表达式”);//只能提取一个(提取一次)

字符串提取(循环提取所有): Regex.Matches(),(可以提取所有匹配的字符串。)

在用正则表达式做字符串提取时,正则中就不要写完全限定符(^、$)了。

 1 #region 从一个html中提取所有Email
 2             string sEmail = File.ReadAllText("大家留下email交友吧_email_天涯社区.htm");
 3             string strPatt = @"[-a-zA-Z0-9_.][email protected][a-zA-Z0-9]+(\.[a-zA-Z]+){1,2}";
 4             MatchCollection mc = Regex.Matches(sEmail, strPatt);
 5             foreach (Match item in mc)
 6             {
 7                 if (item.Success)
 8                 {
 9                     Console.WriteLine(item.Value);
10                 }
11             }
12             Console.WriteLine("找到匹配项"+mc.Count+"个");
13             Console.ReadKey();
14             #endregion

C# 正则表达式(一)

时间: 2024-11-09 15:36:34

C# 正则表达式(一)的相关文章

【Linux系列】【基础版】第四章 Shell基础之正则表达式

4. Shell基础之正则表达式     4.1 正则就是一串有规律的字符串         4.1 grep              4.1.1 格式: grep [-cinrvABC] 'word' filename             4.1.2 -c //count,表示行数             4.1.3 -i //不区分大小写             4.1.4 -n  //显示行号             4.1.5 -r  //遍历所有子目录             4

正则表达式中的逆向思维

人们的正常思维都是顺向的,那么逆向思维呢,特别是初学正则表达式的同学们,好不容易掌握了正则表达式的用法,再突然要你用逆向思维做题,会有很多不适应: 这里拿三道题,来做简单介绍: 1.经典例题取IP: [[email protected] ~]# ifconfig eth0|sed -nr '2s#^[^0-9]+(.*)[a-Z]{5,}.*#\1#gp' 10.0.0.200 2.调换/etc/passwd中最后一列和第一列的位置: [[email protected] ~]# head /p

JAVA正则表达式:Pattern类与Matcher类详解(转)

java.util.regex是一个用正则表达式所订制的模式来对字符串进行匹配工作的类库包.它包括两个类:Pattern和Matcher Pattern 一个Pattern是一个正则表达式经编译后的表现模式. Matcher 一个Matcher对象是一个状态机器,它依据Pattern对象做为匹配模式对字符串展开匹配检查. 首先一个Pattern实例订制了一个所用语法与PERL的类似的正则表达式经编译后的模式,然后一个Matcher实例在这个给定的Pattern实例的模式控制下进行字符串的匹配工作

前端学PHP之正则表达式函数

前面的话 正则表达式不能独立使用,它只是一种用来定义字符串的规则模式,必须在相应的正则表达式函数中应用,才能实现对字符串的匹配.查找.替换及分割等操作.前面介绍了正则表达式的基础语法,本文将详细介绍正则表达式函数 匹配与查找 [preg_match()] preg_match()函数用来执行一个正则表达式匹配,搜索subject与pattern给定的正则表达式的一个匹配.返回pattern的匹配次数.它的值将是0次(不匹配)或1次,因为preg_match()在第一次匹配后将会停止搜索.preg

正则表达式

grep命令和正则表达式 一. 正则 : 正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符.及这些特定字符的组合,组成一个"规则字符串",这个"规则字符串"用来表达对字符串的一种过滤逻辑.给定一个正则表达式和另一个字符串,我们可以达到如下的目的:1. 给定的字符串是否符合正则表达式的过滤逻辑(称作"匹配"):2. 可以通过正则表达式,从字符串中获取我们想要的特定部分. 正则表达式和通配符一样,也是一组特殊符号,通配符是由sh

java中的正则表达式

正则表达式 : 正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串.将匹配的子串替换或者从某个串中取出符合某个条件的子串等. 一些字符所代表的意思: \        将下一字符标记为特殊字符.文本.反向引用或八进制转义符^       匹配输入字符串开始的位置$       匹配输入字符串结尾的位置.        匹配任何单个字符\s      空白(空格符.换行符.回车符.制表符)\S     非空白[]  

Python 正则表达式相关问题

这几天学习python,写正则表达式相关代码如下: import re print(re.search(r'(?<=<(\w+)>).*(?=<\/\1>)',"<b>ewuiiriur</b>sdksfkj").span()) 报错如下: raise error("look-behind requires fixed-width pattern")sre_constants.error: look-behind

7.python之正则表达式re模块

一.re模块的常用方法: re.findall() 用于返回一个字符串中,所有能被正则表达式所匹配到的字符串,以列表的方式返回. 用法re.findall(正则表达式,字符串). s1 = "sadjhjafdsajkhjsdaysadsadduayu" 比如说,想要从上面这一长串字符串中,匹配出a后面有一个任一字符在紧接着一个字母u的字符串. print re.findall('a.u',s1) >>>['ayu'] re.finditer()作用和findall一

JS中有关正则表达式的一些常见应用

总所周知,正则表达式主要用于字符串处理.表单验证等,简单的代码量实现复杂的功能 1.身份证号码的一个校验 先做一个简单的位数校验来判断身份证的合法性:(15位数字或18位数字或17位数字加X|x) var reg=/(^\d{15}$)|(^\d{18}$)|(^\d{17}(^\d|X|x)$)/ if(reg.test(num) === false){ alert("你输入的身份证不合法"); return false; } 18位=前六位地区+中八位出生日期+后4位顺序号(最后一

4-4 grep及正则表达式

1. grep:Globally search a Regular Expression and Print:根据模式搜索文本,并将符合模式的文本行显示出来 pattern:文本字符和正则表达式的元字符 一般查询 其中 -i:忽略大小写 --color: 另外,删掉alias,是以如下格式 -v:显示没有被模式匹配的行 -o:只显示被模式匹配到的字符串 2. 正则表达式:regular expression,简称REGXP 3. 位置锚空 ^: 锚空行道,此字符后的任意内容必须出现在行首 $: