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",它表示单词的边界。
#region 验证身份证号是否正确(规律,第一位不能是0;如果是15位,则全数字,如果是18位,则最后一位即可能是数字也可能是英文字母X)
string strPattr = @"^[1-9][0-9]{14}([0-9]{2}[0-9X])?$";
while (true)
{
Console.WriteLine("请输入你的身份证号:");
string sCode = Console.ReadLine();
if (Regex.IsMatch(sCode, strPattr))
{
Console.WriteLine("true");
}
else
{
Console.WriteLine("false");
}
}
#endregion
#region 验证邮政编码是否正确
string strPattr = @"^[1-9][0-9]{5}$";
while (true)
{
Console.WriteLine("请输入你所在地邮政编码:");
string sCode = Console.ReadLine();
if (Regex.IsMatch(sCode, strPattr))
{
Console.WriteLine("true");
}
else
{
Console.WriteLine("false");
}
}
#endregion
#region 验证所有电话号码是否正确
//1.手机号:以130-139、150-159、186-189这3个号段,后面8位数字。[1][3|5][0-9]{9}|[1][8][6-9][0-9]{8}
//2.座机号:区号以0开头,后面跟2-3位数字,号码为7-8位数字。[0][1-9][0-9]{1,2}(\-)?[0-9]{7,8}
//3.400、800电话:以4或8开头,紧跟2个0,后面为7位数字。[4|8][0]{2}(\-)?[0-9]{7}
//4.5位数字的客服电话 [1-9][0-9]{4} 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})$";
while (true)
{
Console.WriteLine("请输入您的联系方式:");
string sCode = Console.ReadLine();
if (Regex.IsMatch(sCode, strPattr))
{
Console.WriteLine("true");
}
else
{
Console.WriteLine("false");
}
}
#endregion
#region 验证邮箱格式是否合法
string strPattr = @"^[-0-9a-zA-Z_]+@[a-zA-Z0-9]+(\.[a-zA-Z]+){1,2}$";
while (true)
{
Console.WriteLine("请输入您的电子邮箱地址:");
string sEmail = Console.ReadLine();
if (Regex.IsMatch(sEmail, strPattr))
{
Console.WriteLine("true");
}
else
{
Console.WriteLine("false");
}
}
#endregion
#region 匹配IP地址,4段用.分割的最多三位数字。 192.168.54.77是正确的,而333.333.333.333是错误的。
string sIp = "192.168.54.77";
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}$"; if (Regex.IsMatch(sIp, strPattr))
{
Console.WriteLine("true");
}
else
{
Console.WriteLine("false");
}
Console.ReadKey();
#endregion
#region 判断是否是合法的日期格式“2008-08-08”。四位数字-两位数字-两位数字
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])$";
string sYear = ""; if (Regex.IsMatch(sYear, strPatt))
{
Console.WriteLine("true");
}
else
{
Console.WriteLine("false");
}
Console.ReadKey();
#endregion
#region 判断是否是合法的url地址,http://www.test.com/a.htm?id=3&name=aaa、ftp://127.0.0.1/1.txt
string strPatt = @"^.+://.+$";
while (true)
{
Console.WriteLine("请输入url地址:");
string sUrl = Console.ReadLine();
if (Regex.IsMatch(sUrl,strPatt))
{
Console.WriteLine("true");
}
else
{
Console.WriteLine("false");
}
}
#endregion
3.字符串提取
字符串提取(循环提取所有): Regex.Matches(),(可以提取所有匹配的字符串。)
在用正则表达式做字符串提取时,正则中就不要写完全限定符(^、$)了。
#region 从一个html中提取所有Email
string sEmail = File.ReadAllText("大家留下email交友吧_email_天涯社区.htm");
string strPatt = @"[-a-zA-Z0-9_.]+@[a-zA-Z0-9]+(\.[a-zA-Z]+){1,2}";
MatchCollection mc = Regex.Matches(sEmail, strPatt);
foreach (Match item in mc)
{
if (item.Success)
{
Console.WriteLine(item.Value);
}
}
Console.WriteLine("找到匹配项"+mc.Count+"个");
Console.ReadKey();
#endregion
C# 正则表达式(一)的更多相关文章
- JS正则表达式常用总结
正则表达式的创建 JS正则表达式的创建有两种方式: new RegExp() 和 直接字面量. //使用RegExp对象创建 var regObj = new RegExp("(^\\s+) ...
- Python高手之路【五】python基础之正则表达式
下图列出了Python支持的正则表达式元字符和语法: 字符点:匹配任意一个字符 import re st = 'python' result = re.findall('p.t',st) print( ...
- C# 正则表达式大全
文章导读 正则表达式的本质是使用一系列特殊字符模式,来表示某一类字符串.正则表达式无疑是处理文本最有力的工具,而.NET提供的Regex类实现了验证正则表达式的方法.Regex 类表示不可变(只读)的 ...
- C#基础篇 - 正则表达式入门
1.基本概念 正则表达式(Regular Expression)就是用事先定义好的一些特定字符(元字符)或普通字符.及这些字符的组合,组成一个“规则字符串”,这个“规则字符串”用来判断我们给定的字符串 ...
- JavaScript正则表达式,你真的知道?
一.前言 粗浅的编写正则表达式,是造成性能瓶颈的主要原因.如下: var reg1 = /(A+A+)+B/; var reg2 = /AA+B/; 上述两个正则表达式,匹配效果是一样的,但是,效率就 ...
- Python 正则表达式入门(中级篇)
Python 正则表达式入门(中级篇) 初级篇链接:http://www.cnblogs.com/chuxiuhong/p/5885073.html 上一篇我们说在这一篇里,我们会介绍子表达式,向前向 ...
- 【JS基础】正则表达式
正则表达式的() [] {}有不同的意思. () 是为了提取匹配的字符串.表达式中有几个()就有几个相应的匹配字符串. (\s*)表示连续空格的字符串. []是定义匹配的字符范围.比如 [a-zA-Z ...
- JavaScript 正则表达式语法
定义 JavaScript定义正则表达式有两种方法. 1.RegExp构造函数 var pattern = new RegExp("[bc]at","i"); ...
- [jquery]jquery正则表达式验证(手机号、身份证号、中文名称)
数字判断方法:isNaN()函数 test()方法 判断字符串中是否匹配到正则表达式内容,返回的是boolean值 ( true / false ) // 验证中文名称 function isChin ...
- JS中给正则表达式加变量
前不久同事询问我js里面怎么给正则中添加变量的问题,遂写篇博客记录下. 一.字面量 其实当我们定义一个字符串,一个数组,一个对象等等的时候,我们习惯用字面量来定义,例如: var s = &quo ...
随机推荐
- [置顶] iOS开发规范
iOS代码编程规范 详细讲解代码该如何写,怎样写,如何规范. 什么样的代码是最美的,本文档会给你讲解 iOS代码编程规范........................................ ...
- cocos2d 制作动态光晕效果基础 —— blendFunc
转自:http://blog.csdn.net/yang3wei/article/details/7795764 最近的项目要求动态光晕的效果. 何谓动态光晕?之前不知道别人怎么称呼这个效果, 不过在 ...
- 记录一下在WinXP上搭建Apache的httpd+PHP+MySQL+Wordpress的过程
实验室有台旧电脑,想用它一台服务器. 不知为何,U盘启动盘死活不能启动,所以放弃了安装Linux的念头,直接在原来的XP上弄一个服务器,毕竟用的人也不多,也就局域网的这几个人, 本来主要是搭建一个FT ...
- android开发之Fragment加载到一个Activity中
Fragments 是android3.0以后添加的.主要是为了方便android平板端的开发.方便适应不同大小的屏幕.此代码是为了最简单的Fragment的使用,往一个Activity中添加Frag ...
- Android腾讯微博开发之随机字符串与签名实现
Android腾讯微博开发入门之随机字符串与签名实现 直接上代码 1.Utils类,包括签名和随机字符串 import java.util.Random; import javax.cry ...
- 使用proguard混淆android代码
当前是有些工具比方apktool,dextojar等是能够对我们android安装包进行反编译,获得源代码的.为了降低被别人破解,导致源代码泄露,程序被别人盗代替码,等等.我们须要对代码进行混淆,an ...
- SQL Server日期函数总结
获得一个月的天数:首先到得一个月最后一天的日期,通过 SQL Server 日期函数 day() 取得日期中的“天 ”部分 获得 2008 年 2 月份的天数:select day(cast('200 ...
- Spark on Yarn遇到的问题及解决思路
原文:http://www.aboutyun.com/thread-9425-1-1.html 问题导读1.Connection Refused可能原因是什么?2.如何判断内存溢出,该如何解决?扩展: ...
- php常见问题辨析(二)
一:unset: 1.如果在函数中 unset() 一个全局变量,则只是局部变量被销毁,而在调用环境中的变量将保持调用 unset() 之前一样的值,如果您想在函数中 unset() 一个全局变量,可 ...
- iOS如何随意的穿插跳跃,push来pop去
iOS如何随意的穿插跳跃,push来pop去? 主题思想:如A.B.C.D 四个视图控制器. 想要在 A push B 后, B 在push 到 D ,然后从 D pop 到 C ,在从 C pop ...