标签: it |
分类:.net |
正则表达式
u 正则表达式的用途
n 拆分字符串
n 查询字符串
n 替换字符串
u 正则表达式符号-元字符
u 正则表达式在VS.NET中的应用:
n Regex、Match 和 MatchCollection类
n
拆分字符串
u 使用正则表达式来标识分隔符,拆分字符串
正则表达式的概述
u 正则表达式是一种语言
u 正则表达式就是由普通字符(如字符a到z)以及特殊字符(称为元字符)组成的文字模式该模式描述代表了一个或多个字符串、如:
n 正则表达式的例子
String MyRegex=”@\d(5)”
u 正则表达式的用途:可以有效而简捷解决与文本处理有关的许多常见任务,主要用途有:
①查找【搜索,匹配,验证】
②拆分
③替换
正则表达式语言元素—元字符
u 在正则表达式中,有一种意义特殊的构造,即元字符。目前已知的元字符有很多,如 *、?、+ 和 {}字符。其他字符在正则表达式语言中都有特殊的含义。这些字符包括:$ ^ . [ ( | ) ] 和 \。
u 以下为几种常用的符号(更多的参见书本msdn )
|
|
u 正则表达式语言元素 -元字符 >>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); }
}