------- Windows Phone 7手机开发、.Net培训、期待与您交流! -------
正则表达式是用来进行文本处理的技术,几乎所有的语言都可以实现。
正则表达式是由普通字符以及特殊字符(也叫元字符)组成的文字模式。该模式描述在查找文字主体时待匹配的一个或多个字符串。它是一个模板,将某个字符模式与所搜索的字符串进行匹配。所以,它是对字符串进行操作的。同时又有点像通配符(“*.jpg”),是对字符串进行匹配。正则表达式比较复杂,一般我们先掌握常用的正则表达式用法,以后用到其他的再进行查找就可以了。下面我们来详细看下。
元字符:
元字符在正则表达式中是非常重要的,是它的基本组成元素。分为以下类型:
.: .匹配除\n之外的任何单个字符。如:”b.g”能匹配出:big,b g等等,b和g中间可以是任意单个字符。
[]: 匹配括号中的任意一个字符。如:”b[abc]g”能匹配出:bag,bbg,bcg,注意它是匹配[]内的任意一个字符,所以babg等是匹配不到的。我们也可以再括号中使用连字符”-”来指定字符的区间来简化表示,如[0-9]可以匹配任意单个数字字符,等价于[0123456789];同时我们还可以指定多个区间,如[A-Za-z]可以匹配出任意大小写的字母;[A-Za-z0-9]可以匹配出任意一个大小写的字母或者数字。
|: 将两个匹配条件进行逻辑“或”运算。如”g|food”能匹配出:g或者food;而(g|f)ood则匹配出:good或food。这里我们用到了(),接着会说到。
(): 将()之间括起来的表达式定义为“组”,并将匹配这个表达式的字符保存到一个临时区域,这个元字符在字符串提取的相当有用,它将一些字符表示为一个整体。具有改变优先级、定义提取组的作用。
*: 匹配0或者多个在它之前的子表达式,不过它跟通配符的*没有关系。如正则表达式”ab*”能匹配出必须含有a(1或者多个),可以含有b(0或者多个)也可以含有其他字符的表达式,并且不分先后顺序,如a,ab,abbb,ababab,ba等;又如”a(b|c)*”能匹配出必须含有a(1或者多个),可以含有b(0或者多个)、c(0或者多个) 也可以含有其他字符的表达式,也不分先后;再如”a(bc)*”,其实跟”a(b|c)”是一样的;还如”abc*”,其实和”(ab)c”是一样的,必须包含ab(1或者多个),可以包含b(0或者多个) 也可以含有其他字符的表达式,ab的顺序要保持。
+: 匹配1或者多次在它之前的子表达式,和*的区别就在于一个是1或者多次,一个是0或者多次。如”0+”,匹配出只要包含0的表达式;又如”01+”,匹配出只要包含01组合的表达式;再如”0(1|2)+”,匹配出只要包含01或者02组合的表达式。
?: 匹配0次或1次它之前的子表达式。如”a?”,这样严格是不正确的,因为它所有的表达式都认为匹配;又如”ab?”,匹配出只要含有a的表达式都可以。
{n}: 匹配确定的n次。如:”a{2}”,能匹配出包含aa组合的表达式;又如”ab{2}”,能匹配出包含abb组合的表达式;再如”abc{2}”,能匹配出包含abcc的表达式;三如”a(bc){2}”,能匹配出abcbc组合的表达式;还如”a(b|c){2}”,能匹配出包含abb、abc、acc的表达式。
{n,}: 表示至少匹配n次。如:”a{2,}”能匹配出包含两个及以上的连续a的表达式.
{n,m}: 表示至少匹配n次且至多匹配m次。如:”a{2,5}”能匹配出只要是包含两个及以上的连续a的表达式,但是如果多于5个连续a,它是只认得前5个a。
^(即shift + 6): 匹配以什么什么开始。如:”^a”,匹配出任意以a为开头的表达式,如”a”、”abc”等。其中,^还有另外一个意思,即非(!)。如:”^a”,匹配出只要不是单个字符a的表达式;又如”[^0-9]”匹配出只要不是单纯数字的表达式。
$: 表示以什么结尾。如:”a$”,匹配出任意以a为结尾的表达式。
说完元字符,我们来看看它们的其中一些简写表达式。
简写表达式:
\d:代表一个数字,跟[0-9]是相同的;
\D:代表非数字,跟[^0-9]是相同的;
\s:代表换行符、Tab制表符等空白字符(空格、回车、制表符);
\S:代表非空白字符
\w:匹配字母、数字、下划线、汉字等,即能组成单词的字符,除%&#@!$等字符。
\W:代表非\w
.Net中的正则表达式:
正则表达式在.Net中就是用字符串表示的,只是该字符串比较特殊,但它在C#语言看来就是普通的字符串,具体意义会有Regex类内部进行语法分析。
在C#中,要引用一个程序集,即using System.Text.RegularExpressions;一般会有以下方法:
Regex.IsMatch(字符串,正则表达式):可以判断是否匹配;如
Console.WriteLine("输入一个字符串我们来判断是否是我们想要的! ");
while (true)
{
string input = Console.ReadLine();
if (Regex.IsMatch(input, @"a$"))
{
Console.WriteLine("是的");
}
else
{
Console.WriteLine("不是");
}
}
Regex.Match(字符串,要提取字符串的正则表达式);只是该方法只能提取一次;如要提取全部,要用Regex. Matches方法;以下为事例:提取一个字符串里的数字
string str = "大家好,我叫帅哥,今年正值青春22岁,海拔177,压地球65";
Regex reg = new Regex(@"\d+");
MatchCollection m = reg.Match(str, 0);
foreach (var item in m)
{
Console.WriteLine(item);
}
Console.ReadKey();
这里使用的Match方法,只会找到第一个数字,即22;如果想三个数字都找到,只需要把Match换成Matches即可!
我们正则表达先说到这,正则表达式入门不难,只要多用就可以熟练了。
------- Windows Phone 7手机开发、.Net培训、期待与您交流! -------