一些正则表达式

正则表达式

(2011-04-25 10:36:57)
标签:

it

分类:.net

正则表达式

     正则表达式的用途

       拆分字符串

       查询字符串

       替换字符串

     正则表达式符号-元字符

     正则表达式在VS.NET中的应用:

       Regex、Match 和 MatchCollection类

n

 

拆分字符串

     使用正则表达式来标识分隔符,拆分字符串

正则表达式的概述

     正则表达式是一种语言

     正则表达式就是由普通字符(如字符a到z)以及特殊字符(称为元字符)组成的文字模式该模式描述代表了一个或多个字符串、如:

       正则表达式的例子

String MyRegex=”@\d(5)”

     正则表达式的用途:可以有效而简捷解决与文本处理有关的许多常见任务,主要用途有:

①查找【搜索,匹配,验证】

②拆分

③替换

 

 

正则表达式语言元素—元字符

               在正则表达式中,有一种意义特殊的构造,即元字符。目前已知的元字符有很多,如 *、?、+ 和 {}字符。其他字符在正则表达式语言中都有特殊的含义。这些字符包括:$ ^ . [ ( | ) ] 和 \。

               以下为几种常用的符号(更多的参见书本msdn )

 

符号

含义

^

指定检查开始处

$

指定检查结束处

*

出现 0 或多次 例:

x*匹配0个或者多个x

+

出现 1 或多次 例:x+

?

     出现 0 或 1 次 例:x?

[ ]

匹配方括号中的任意一个,

[xyz]匹配x,y,z中的任意一个;

[a–z] 匹配a到z中的任意一个

\d{ }

“\d”指定输入的值是一个数字,

{ } 表示已指定数据类型的出现次数

 

符号

含义

.

匹配单个字符(除了\n)

|

x|y匹配x或者y

\w

允许输入任何值

{n}

匹配前面的字符n次,例x{2}匹配xx,不匹配x,xxx.

{n,}

匹配前面的字符n次或更多.例x{2,}匹配xx,xxx,xxxx…

{n,m}

匹配前面的字符最少n次,最多m次。

例如:x{2,4}匹配xx,xxx,xxxx,

不匹配x,xxxxx.

 

 

               正则表达式语言元素 -元字符 >>msdn

①    字符转义 :提供有关转义符集的信息,这些转义符通知正则表达式分析器字符不是运算符而应解释为匹配字符。

②    替换 :提供有关在替换模式中使用的特殊构造的信息。

③    字符类 :提供有关定义要匹配的子字符串的正则表达式字符集的信息。

④    正则表达式选项 :提供有关修改正则表达式模式的匹配行为的选项集的信息。

⑤    原子零宽度断言 :提供有关零宽度断言的信息,该断言根据正则表达式分析器在输入字符串中的当前位置而使匹配成功或失败。

⑥    限定符 :提供有关修改正则表达式的可选数量数据的信息。

⑦    分组构造 :提供有关使正则表达式捕获子表达式组的分组构造的信息。

⑧    后向引用构造:提供有关正则表达式后向引用修饰符的信息。

⑨    替换构造 :提供有关修改正则表达式以允许 either/or 匹配的替换信息的信息。

⑩    其他构造 :提供有关修改正则表达式匹配行为的其他构造的信息。

 

正则表达式的局限性

一个验证邮件地址的正则表达式

国内电话号码:(\(0\d{2,3}\)|0\d{2,3}-)?\d{7,8}(-\d{1,4})?

支持:(010)6906593;0106906593;010-6906593;6906593;6906593-1234;010-6906593-1234;

国内手机号码:^(13[0-9]|15[0-9]|18[8|9|7])\d{8}$

邮编:^\d{6}$

QQ号码:^[1-9]\d{4,8}$

英语:^[A-Za-z]\w{1,}+$

时间的正则表达式:^((((1[6-9]|[2-9]\d)\d{2})-(0?[13578]|1[02])-(0?[1-9]|[12]\d|3[01]))|(((1[6-9]|[2-9]\d)\d{2})-(0?[13456789]|1[012])-(0?[1-9]|[12]\d|30))|(((1[6-9]|[2-9]\d)\d{2})-0?2-(0?[1-9]|1\d|2[0-8]))|(((1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))-0?2-29-))(20|21|22|23|[0-1]?\d):[0-5]?\d$

 

 

使用常用正则表达式验证数据

Email : ^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$,
Phone :^((\(\d{2,3}\))|(\d{3}\-))?(\(0\d{2,3}\)|0\d{2,3}-)?[1-9]\d{6,7}(\-\d{1,4})?$,
Mobile : ^((\(\d{2,3}\))|(\d{3}\-))?13\d{9}$,
Url :^http:\/\/[A-Za-z0-9]+\.[A-Za-z0-9]+[\/=\?%\-&_~`@[\]\':+!]*([^\"\"])*$,
IdCard : ^\d{15}(\d{2}[A-Za-z0-9])?$,
Currency : ^\d+(\.\d+)?$,
Number : ^\d+$,
QQ : ^[1-9]\d{4,8}$,
Integer : ^[-\+]?\d+$,
Double : ^[-\+]?\d+(\.\d+)?$,
English : ^[A-Za-z]+$,
Chinese : ^[\u0391-\uFFE5]+$,
Username : ^[a-z]\w{3,}$

 

正则表达式在VS.NET中的应用

 

Regex类

Regex表示正则表达式(解析和处理文本),用途:

①查询字符串,搜索匹配正则表达式模式的字符串

②拆分字符串,标识分隔符,将字符串拆分为字符串

RegexOptions枚举类型

 

 

Regex类的方法

 

MatchCollection 类和Match类

MatchCollection 类表示通过一迭代

 

拆分字符串

使用正则表达式来标识分隔符,拆分字符串

Regex r = new Regex(@"\\");

string [] parts =r.Split(@"c:\inetpub\wwwroot\study");

foreach (string tmpstr in parts)

{ Console.WriteLine(tmpstr); }

 

替换字符串

使用正则表达式来标识的文本,以执行查找替换

string input = "this is a good day";

Regex r5 = new Regex("good");

String output = r5.Replace(input, "happy");

 

 

提取字符串

 从字符串中提出数据,步骤

1. 创建一个正则表达式,并用圆括号括起来;

2. 利用Regex.Match静态方法创建

System.Text.RegularExpressions.Match 的实例;

3. 调用 Match.Groups数组获取数据。

string input = "Company Name: Contoso, Inc.";

string myRegex = @"Company Name: (.*$)";

Match m = Regex.Match(input, myRegex);

Console.WriteLine(m.Groups[1]);

 

查询字符

使用正则表达式来指定模式,来判断字符串是否

Console.WriteLine(Regex.IsMatch("1234",@"\d{5}"));

Console.WriteLine(Regex.IsMatch("12345",@"\d{5}"));

Console.WriteLine(Regex.IsMatch("12345","\\d{5}"));

Regex r1 = new Regex(@"\d{5}");

Console.WriteLine(r1.IsMatch("1234"));

Regex rx = new Regex(@"-?\d+(\.\d{2})?");

//Regex rx = new Regex(@"^-?\d+(\.\d{2})?$");

string[] tests = { "-52", "19.99", "0.001", "100abc" };

foreach (string test in tests)

{

 if (rx.IsMatch(test))

 { Console.WriteLine("{0} Match.",test); }

else

{ Console.WriteLine("{0} no.", test); }

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值