张磊(Avraber)

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

正则表达式
-> 正则表达式就是一个字符串
-> 正则表达式用来进行匹配数据
-> 语言无关,js等很多地方都要使用
-> 类似于通配符,但不仅仅是通配符
<1>正则表达式的元字符
\w  匹配大小写英文字符及数字 0 到 9 之间的任意一个及下划线,相当于 [a-zA-Z0-9_]
\W  不匹配大小写英文字符及数字 0 到 9 之间的任意一个,相当于 [^a-zA-Z0-9_]
\s  匹配任何空白字符,相当于 [ \f\n\r\t\v]
\S  匹配任何非空白字符,相当于 [^\s]
\d 匹配任何 0 到 9 之间的单个数字,相当于 [0-9]
\D  不匹配任何 0 到 9 之间的单个数字,相当于 [^0-9]
*  匹配 0 到多个元字符,相当于 {0,}
?  匹配 0 到 1 个元字符,相当于 {0,1}
{n}  匹配 n 个元字符
{n,}  匹配至少 n 个元字符
{n,m}  匹配 n 到 m 个元字符
+  匹配至少 1 个元字符,相当于 {1,}
^  字符串必须以指定的字符开始
$  字符串必须以指定的字符结束
<2>正则表达式的用法
bool Regex.IsMatch(字符串, 正则表达式);
Match m = Regex.Match("age=30", @"^(.+)=(.+)$")
    if(m.Success)
    {
        Console.WriteLine(m.Groups[1].Value);
        Console.WriteLine(m.Groups[2].Value);
    }
MatchCollection ms = Regex.Matches(字符串, 正则表达式);
Regex.Replace

<3>常用的正则表达式
IP地址:“^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$”
严谨IP:^(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9])\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)
\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[0-9])$
日期格式:^\d{4}\-\d{2}\-\d{2}$”
严谨日期:^\d{4}\-((0[1-9])|(1[0-2]))-((0[1-9])|(1[0-9])|(2[0-9])|(3[0-1]))$
电子邮件:[0-9a-zA-Z\._-]+)@([0-9a-zA-Z-_]+(\.[0-9a-zA-Z-_]+)+
身份证:^\d{15}$    ^\d{14}([0-9X]{4})$
国内电话:^\d{3}-\d{8}$|^\d{4}-\d{7}$
<4>正则表达式深入
正则表达式捕捉到的东西有 m.Value m.Index m.Length
提取组: 1、分组是对匹配到的一个字符串进行处理
         2、分组的组序号从1开始,为0的组,就是value本身
         3、分序号从左往右数(,第几次出现,就是第几组
<5> 贪婪模式和非贪婪模式 
               在正则表达式中,对于个数限定符(+,*,{n,},...)默认是尽可能的匹配,称为“贪婪模式”
               如果需要取消贪婪模式,在限定符后加上一个?
               正则表达式多个贪婪模式存在的时候,从左往右轻度依次降低
               如果是同类型贪婪模式在一起,左边最强,右边最弱,而且除了以第一个其余的轻度相同
            string str = @"1234567890";
            string regex = @"(\d+)(\d+)(\d+)";
            Match m = Regex.Match(str, regex);
            if (m.Success)
            {
                Console.WriteLine("第一组{0}\n", m.Groups[1].Value);
                Console.WriteLine("第二组{0}\n", m.Groups[2].Value);
                Console.WriteLine("第三组{0}\n", m.Groups[3].Value);
            }

            Console.ReadKey();
            在这里,第一个匹配到8个,二三个匹配到了1个
            也就是相同的符号下,第一个取最多,剩下的匹配一样。

posted on 2012-07-05 23:29  张磊(Avraber)  阅读(144)  评论(0编辑  收藏  举报